我需要一些关于在Node + Express中设置其余路由的帮助。
我的问题如下:
controller.js:
module.exports = {
findAll: function(req, res) {
var users = User.findAll();
res.json(users);
}
};
user.js的:
module.exports = {
findAll: function(req, res) {
userModel.user.find(function(err, user) {
if (!err) {
console.log(user);
} else {
console.log(err);
}
});
}
};
此console.logs用户按预期方式,但是如果我将console.log位更改为返回:
findAll: function(req, res) {
return userModel.user.find(function(err, user) {
if (!err) {
return user;
} else {
return console.log(err);
}
});
}
它给了我一个错误:
TypeError:将循环结构转换为JSON at Object.stringify(native) 在ServerResponse.res.json ...
我没有看到我会在哪里有任何圆形结构..我正在使用Mongoose,就像说的,只要我只用console.log用户列表,一切正常,但是一旦我尝试返回它我的控制器失败了...我在这里看不到什么?
答案 0 :(得分:3)
您不能只在异步执行上下文中返回值
问题在于这一行:
var users = User.findAll();
User.findAll();
返回一个查询对象(在请求发生之前)。
所以res.json(users);
尝试对具有循环结构的查询对象进行字符串化。
查询#ref([criteria],[callback])
查找文档。
<强>参数:强>
[criteria]
<Object>
mongodb选择器
[callback]
<Function>
<强>返回:强>
<Query>
这个如果没有传递回调,则不执行查询。
您可以使用static methods:
userSchema.statics.findAll = function (cb) {
this.find(cb);
}