首页 > 解决方案 > TypeError:将循环结构转换为 JSON 环回和 mongodb

问题描述

我有一个我正在尝试实现的环回远程方法。

"use strict";

module.exports = function(Quote) {
  /**
   *
   * @param {Function(Error, object)} callback
   */

  Quote.random = function(callback) {
    Quote.getDataSource().connector.connect(function(err, db) {
      var collection = db.collection('Quote');
      collection.aggregate([
        {Sample: {size: 1}},
      ], function(err, data) {
        if (err) return callback(err);

        return callback(null, data);
      });
    });
  };
};

但是每次我尝试在loopbackapi explorer 中查看它时,我都会收到此错误。

/Users/macuser/Documents/projects/loopback/Quotes/node_modules/mongodb/lib/utils.js:132
  throw err;
  ^
TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
at stringify (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/express/lib/response.js:1119:12)
at ServerResponse.json (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/express/lib/response.js:260:14)
at Object.sendBodyJson [as sendBody] (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/strong-remoting/lib/http-context.js:437:7)
at HttpContext.done (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/strong-remoting/lib/http-context.js:578:24)
at /Users/macuser/Documents/projects/loopback/Quotes/node_modules/strong-remoting/lib/rest-adapter.js:539:11
at /Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:3888:9
at /Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:473:16
at replenish (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:1006:25)
at iterateeCallback (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:995:17)
at /Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:969:16
at /Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:3885:13
at interceptInvocationErrors (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/strong-remoting/lib/remote-objects.js:724:22)
at /Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:473:16
at replenish (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:1006:25)
at iterateeCallback (/Users/macuser/Documents/projects/loopback/Quotes/node_modules/async/dist/async.js:995:17)
[nodemon] app crashed - waiting for file changes before starting...

有什么改变mongodb吗?

标签: javascriptmongodbloopbackjs

解决方案


根据 mongodb 节点驱动程序文档,聚合函数现在返回一个游标(从 2.6 开始)。聚合已更改,现在返回 AggregationCursor。

试试这个代码,让我知道结果。这对我有用。

'use strict';

module.exports = function(Quote) {
    /**
     *
     * @param {Function(Error, object)} callback
     */

    Quote.random = function(callback) {
        Quote.getDataSource().connector.connect( function (err, db)  {
            var collection = db.collection('Quote');
            var check = collection.aggregate([ {$sample: { size: 1}}]);
            check.get(function (err, data) {
                if(err) return callback(err);
                return callback(null, data);
            })
        });
    };
};

参考链接:https ://github.com/strongloop/loopback-connector-mongodb/issues/434#issuecomment-396890775


推荐阅读