TypeError:将循环结构转换为JSON环回和mongodb

时间:2018-09-28 01:53:59

标签: javascript mongodb loopbackjs

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

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

但是每次我尝试在loopback api资源管理器中查看它时,都会遇到此错误。

/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有什么变化吗?

2 个答案:

答案 0 :(得分:0)

请在下面检查如何在环回中创建Remote Method。 参考链接:here

module.exports = function(Quote) {
  Quote.remoteMethod('random', {
            accepts: [{ //if required
              arg: 'filter',
              type: 'object',
              required: false
          }],
            http: {path: '/list', verb: 'get'},
          returns: [
              { type: 'array', root: true } //change as per requirement 
          ]
  });

  Quote.random(filter, callback) { 

    let quoteCollection = Quote.getDataSource().connector.collection("Quote");
    quoteCollection.aggregate([
          {Sample: {size: 1}},
        ], function(err, data) {
          if (err) return callback(err);

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

答案 1 :(得分:0)

根据mongodb节点驱动程序docs,聚合函数现在返回游标(从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