我需要一些帮助来在 Node + Express 中设置休息路线。
我的问题如下:
Controller .js:
module.exports = {
findAll: function(req, res) {
var users = User.findAll();
res.json(users);
}
};
用户.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: Converting circular structure to JSON at Object.stringify (native) at ServerResponse.res.json...
我看不出哪里会有任何循环结构。我正在使用 Mongoose,就像所说的,只要我只 console.log 用户列表,一切都可以正常工作,但是一旦我尝试返回它我的 Controller 失败了...我在这里没有看到什么?
最佳答案
你不能只在异步执行上下文中返回一个值
问题出在这一行:
var users = User.findAll();
User.findAll();
返回一个查询对象(在请求发生之前)。
所以res.json(users);
尝试对具有循环结构的查询对象进行字符串化。
From the docs :
Query#find([criteria], [callback])
Finds documents.
Parameters:
[criteria]
<Object>
mongodb selector
[callback]
<Function>
Returns:
<Query>
thisWhen no callback is passed, the query is not executed.
推荐的解决方案
您可以使用static methods :
userSchema.statics.findAll = function (cb) {
this.find(cb);
}
关于node.js - NodeJS返回值时出现循环结构错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22156896/