我目前正在尝试使用Mongoose的用户,但是当我尝试将该功能移动到一个单独的模块时,它会抛出一些不太有用的错误。所以一些介绍:
如果我在控制器中使用这样的话:
exports.index2 = function(req, res) {
Users.find(function(err, users){
if (err){
console.log("ERR");
}
console.log(users);
res.json(users);
});};
一切都很好,但是当我试图将它分开时,它就不起作用了。
exports.index = function(req, res) {
UsersModel.findAll(function(users, err){
if (!err){
console.log(users); <--- this is not showing
res.send(users);
}else
console.log(err);
});
};
//这是在模型中,这在Controller
中是必需的findAll: function() {
User.find(function(err, users){
if (err){
console.log("ERR");
}
//console.log(users); <--- this is showing
return users;
});
},
我未定义,因为我试图运行findAll同步而不是异步。在“照顾”这个之后,未定义消失了,但它仍然不起作用。
答案 0 :(得分:1)
首先,您将回调函数传递给findAll()函数...
UsersModel.findAll(function(users, err){ ... })
...但findAll()方法从不使用此回调来返回任何值。根据它的使用方式,可以预期更多地按照以下方式定义:
findAll: function(callback) {
User.find(function(err, users){
callback(err, users);
});
}
此外,您在第二个示例中的分支是这样的,即路径中永远不会发送响应:
exports.index = function(req, res) {
UsersModel.findAll(function(users, err){
if (!err){
console.log(users); <--- this is not showing
res.send(users);
}else
console.log(err);
});
};
与第一个示例不同,函数仅调用res.send是在成功案例中进行的。因此,如果出现错误,您正在记录它,然后该函数退出,并且客户端永远不会发送响应(至少不会被此处理程序发送)。
基本上,您遇到的问题是管理回调。如果您感兴趣的话,这里是JavaScript回调模式的a good resource。
干杯。