Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在NodeJS中返回值时出现循环结构错误_Node.js_Rest_Express_Mongoose - Fatal编程技术网

Node.js 在NodeJS中返回值时出现循环结构错误

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

在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.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()返回查询对象(甚至在请求发生之前)

so
res.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);
}