在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); }