Javascript 错误';对象没有方法xxx';使用猫鼬时
我正在尝试使用Mongoose连接MongoDB和NodeJ 我的代码如下。当我试图通过api/用户执行GET/POST时,我得到 错误Javascript 错误';对象没有方法xxx';使用猫鼬时,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,我正在尝试使用Mongoose连接MongoDB和NodeJ 我的代码如下。当我试图通过api/用户执行GET/POST时,我得到 错误 有人能解释一下我做错了什么吗?我不得不将代码拆分成不同的文件,因为我有很多函数,我不想把它们弄乱我的app.js或index/routes.js app.js //database connection mongoose.connect('....'); var db = mongoose.connection; db.on('error', conso
有人能解释一下我做错了什么吗?我不得不将代码拆分成不同的文件,因为我有很多函数,我不想把它们弄乱我的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;
exports.list = function (req, res){
var users = UserModel.list(); // <---------- This is the error Line
return res.send(users);
}
路由/user.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;
exports.list = function (req, res){
var users = UserModel.list(); // <---------- This is the error Line
return res.send(users);
}
exports.list=函数(请求、恢复){
var users=UserModel.list();//Mongoose中模型
对象的方法
属性用于将函数添加到模型对象的实例中。因此,在代码中,函数列表
被添加到用户模型
的实例中。如果您希望使用类似于单例函数的静态
,则可以直接添加它调用mongoose.model('UserModel',userModelSchema);
返回到UserModel
对象:
现在,您可以调用它来返回所有用户的列表
请注意,它仍然是一个异步函数。因此,您不能只返回调用该函数的结果,因为它通常为空。find
是异步的,因此您的list
函数还需要接受在返回列表时可以调用的回调:
UserModel.list(function(list) {
res.render(list);
});
你在哪一行看到了错误?我更新了问题的错误。还指出了错误发生的那一行。错误发生在routes/user中。jsUserModel
没有list
方法。你使用方法将它添加到UserModel
的实例中。
你可以做UserModel.list=list
添加它。如果我使用userSchema.list=list,也会有帮助吗?嗨@WiredPairie,请将其作为答案,我会接受。你是对的。它起了作用。你的最后一段让我更清楚了。谢谢!我现在明白了。静态方法也可以通过使用关键字statics-animalSchema来定义.statics.findByName=函数(名称,cb){}