使用Mongoose时出错'Object has no method xxx'

我正在尝试使用Mongoose来连接MongoDB和Nodejs。

我有我的代码如下。 当我试图通过api /用户做GET / POST时,我得到了

错误


TypeError: Object function model(doc, fields, skipId) { [08/14 21:28:06 GMT+0800] if (!(this instanceof model)) [08/14 21:28:06 GMT+0800] return new model(doc, fields, skipId); [08/14 21:28:06 GMT+0800] Model.call(this, doc, fields, skipId); [08/14 21:28:06 GMT+0800] } has no method 'list' 

有人可以解释我做错了什么? 我不得不把我的代码分成不同的文件,因为我有很多的function,我不想把它们或者我的app.js或index / routes.js

app.js

 //database connection mongoose.connect('....'); var db = mongoose.connection; db.on('error', console.error.bind(console, 'connection error:')); db.once('open', function callback () { console.log("Conncection Success !"); }); users_module= require('./custom_modules/users.js'); users_module.init_users(); ... app.get('/api/users',user.list); // routing code from expressjs 

/custom_modules/users.js

 function init_users() { userSchema = mongoose.Schema({ //id: Number, usernamename: String, hash: String, ... }); userSchema.methods.list = list; UserModel = mongoose.model('User', userSchema); } function list() { return UserModel.find(function (err, users) { if (!err) { return users; } else { return console.log(err); } }); }); exports.init_users = init_users; 

路线/ user.js的

 exports.list = function (req, res){ var users = UserModel.list(); // <---------- This is the error Line return res.send(users); } 

Mongoose中的model对象的methods属性用于将函数添加到模型对象的实例。 所以,在你的代码中,函数list被添加到UserModel一个实例中。 如果你希望有一个类似于单例函数的static方法,那么你可以直接将它添加到调用mongoose.model('UserModel', userModelSchema);返回的UserModel对象中mongoose.model('UserModel', userModelSchema);

 UserModel.list = list; 

现在,您可以调用它来返回所有用户的列表。

请注意,它仍然是一个asynchronousfunction。 所以,你不能只是返callback用函数的结果,因为它通常是空的。 find是asynchronous的,所以你的list函数也需要接受一个可以在列表返回时调用的callback:

 UserModel.list(function(list) { res.render(list); });