Node.js 在NodeJS中返回值时出现循环结构错误
在Node+Express中设置rest路由时,我需要一些帮助 我的问题如下: controller.js:Node.js 在NodeJS中返回值时出现循环结构错误,node.js,rest,express,mongoose,Node.js,Rest,Express,Mongoose,在Node+Express中设置rest路由时,我需要一些帮助 我的问题如下: 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.fi
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.log按预期为我记录用户,但如果我更改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(本机)
在ServerResponse.res.json
我看不出哪里会有任何圆形结构。。我正在使用Mongoose,就像上面说的,只要我只在console.log中记录用户列表,一切都正常,但一旦我尝试将它返回到我的控制器,它就会失败。。。我在这里看不到什么?您不能只在异步执行上下文中返回值 这一行的问题在于:
var users = User.findAll();
User.findAll()代码>返回查询对象(甚至在请求发生之前)
sores.json(用户)代码>尝试字符串化具有循环结构的查询对象
:
查询#查找([条件],[回调])
查找文档
参数:
[标准]
mongodb选择器
[回调]
返回:
此
如果没有传递回调,则不执行查询
推荐解决方案
您可以使用:
好的,所以我必须将我的控制器更改为findAll:function(req,res){User.findAll(req,res);在我的User.js中,我执行findAll:function(req,res){userModel.User.find(function(err,User){if(!err){res send(u.clone(User));}else{console.log(err);}}@QlliOlli在使用本机node.js驱动程序时,请参阅我推荐的解决方案,因为mongoose无法使用。(对于mongoose尚未实现的方法)
userSchema.statics.findAll = function (cb) {
this.find(cb);
}