2011-09-16 7 views
1

Ceci est mon fichier locationsModel.js:Pourquoi mon modèle Mongoose ne se charge-t-il pas?

var LocationSchema, LocationsSchema, ObjectId, Schema, mongoose; 
mongoose = require('mongoose'); 
Schema = mongoose.Schema; 
ObjectId = Schema.ObjectId; 
LocationSchema = { 
    latitude: String, 
    longitude: String, 
    locationText: String 
}; 
LocationsSchema = new Schema(LocationSchema); 
LocationsSchema.method({ 
    getLocation: function(callback) { 
    return console.log('hi'); 
    } 
}); 
exports.Locations = mongoose.model('Locations', LocationsSchema, 'locations'); 

Dans mon contrôleur, j'ai:

var Locations, mongoose; 
mongoose = require('mongoose'); 
Locations = require('../models/locationsModel').Locations; 
exports.search = function(req, res) { 
    var itemText, locationText; 
    Locations.getLocation('info', function(err, callback) { 
    return console.log('calleback'); 
    }); 
    return; 
}; 

Quand je lance, je reçois l'erreur suivante:

TypeError: Object function model() { 
    Model.apply(this, arguments); 
    } has no method 'getLocation' 

Que suis-je disparu?

+0

Dans votre contrôleur au lieu de '= Emplacements require ('modèles ..//locationsModel') Emplacements,' vous pouvez simplement aller 'Locations = mongoose.model ('Locations')' –

Répondre

3

Je pense que ce que vous cherchez est la statique plutôt qu'une méthode.

Selon le docs:

Je pense que vous devez définir la fonction getLocations comme suit (regardant votre utilisation de getLocations vous avez un paramètre de chaîne, ainsi que le rappel:

LocationsSchema.statics.getLocation = function(param, callback) { 
    return console.log('hi'); 
} 

La différence entre statics et methods est de savoir si vous l'appelez sur le "type" ou les "objets" de ce type. examples:

BlogPostSchema.methods.findCreator = function (callback) { 
    return this.db.model('Person').findById(this.creator, callback); 
} 

que vous souhaitez invoquez en tant que tel.

BlogPost.findById(myId, function (err, post) { 
    if (!err) { 
    post.findCreator(function(err, person) { 
     // do something with the creator 
    } 
    } 
}); 
+0

Merci beaucoup! Wow génial! Alors, quand est-ce que j'utiliserais une méthode statique ou une méthode? – Shamoon

+0

@Shamoon: J'ai édité ma réponse. – beny23

Questions connexes