在NodeJS中返回值时出现循环结构错误
我需要一些帮助,在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.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:在ServerResponse.res.json的Object.stringify(native)处将循环结构转换为JSON …
我没有看到我会有什么圆形结构..我使用的是Mongoose,就像所说的,只要我只有console.log用户列表,一切正常,但只要我尝试将其返回到我的控制器它失败了…我在这里没有看到什么?
你不能只是在asynchronous执行上下文中返回一个值
问题在于这一行:
var users = User.findAll();
User.findAll();
返回一个查询对象(甚至在请求发生之前)。
所以res.json(users);
尝试将具有循环结构的查询对象串化。
从文档 :
Query#find([criteria],[callback])
查找文档。
参数:
[criteria]
<Object>
mongodbselect器
[callback]
<Function>
返回:
<Query>
这个当没有callback传递时,查询不会被执行。
推荐解决scheme
你可以使用静态方法 :
userSchema.statics.findAll = function (cb) { this.find(cb); }