javascript - 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);
});
});
};
};
但是每次我尝试在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.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
推荐阅读
- python-3.x - 是否可以从值中获取 xpath 位置?
- azure - 默认情况下在新子网上应用 NSG/ASG (Azure)
- c# - 如何使用 C# 从 SqlConnection 返回多个结果
- php - 向相关经理发送 WooCommerce 新订单电子邮件通知
- linux - LACP 绑定中的流失状态含义
- android - Kotlin 中的空内容共享首选项
- react-native - 如何重新渲染 redux 状态。状态更改已完成但呈现问题
- vb6 - Visual Basic 6 如何使用异常?
- javascript - jQuery 无法识别克隆的输入
- javascript - 无法在 IE11 中禁用平滑滚动