node.js - NodeJS返回值时出现循环结构错误

标签 node.js rest express mongoose

我需要一些帮助来在 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> this

When 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/

相关文章:

javascript - 使用 node.js + Q deferred/promises 模块从同步回调创建同步循环

javascript - 在运行 Mocha 测试之前等待路由和数据库初始化

java - CXF平安归来图片

javascript - 获取 API 未发布到 Node.js 服务器(正文为空)

node.js - Jade 模板引擎 - 每个迭代偏移量

javascript - Node.js 中的路由模块出现 `Cannot GET/en/first` 错误

javascript - 获取请求在服务器端不起作用

rest - 带通知的 PayPal REST API

java - Spring Data Elasticsearch 查询日期格式

node.js - 使用JWT token 时应如何处理RESTful身份验证?