gee*_*ter 6 javascript mongoose mongodb node.js
我正在尝试使用Mongoose将MongoDB与Nodejs连接起来.
我的代码如下.当我尝试通过api/users进行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'
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下我做错了什么吗?我不得不将我的代码拆分成不同的文件,因为我有很多功能,我不想把它们搞乱我的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
Run Code Online (Sandbox Code Playgroud)
/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;
Run Code Online (Sandbox Code Playgroud)
路线/ user.js的
exports.list = function (req, res){
var users = UserModel.list(); // <---------- This is the error Line
return res.send(users);
}
Run Code Online (Sandbox Code Playgroud)
Mongoose中对象的methods属性model用于向模型对象的实例添加函数.因此,在您的代码中,该函数list被添加到实例中UserModel.如果你想要一个static类似的单例函数,那么你可以将它直接添加到UserModel调用返回的对象mongoose.model('UserModel', userModelSchema);:
UserModel.list = list;
Run Code Online (Sandbox Code Playgroud)
现在,您可以调用它来返回所有用户的列表.
请注意,它仍然是一个异步函数.所以,你不能只返回调用函数的结果,因为它通常是空的.find是异步的,所以你的list函数也需要接受一个回调,当回到列表时可以调用它:
UserModel.list(function(list) {
res.render(list);
});
Run Code Online (Sandbox Code Playgroud)