TypeError: Преобразование круговой структуры в JSON loopback и mongodb

1

У меня есть удаленный метод loopback, который я пытаюсь реализовать.

"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 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 то изменилось с mongodb?

Показать ещё 2 комментария
Теги:
loopbackjs

2 ответа

0

Согласно документации драйвера узла 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

0

Пожалуйста, проверьте ниже, как создать Remote Method в loopback. Ссылка: здесь

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню