我有一个angular2客户端HTTP请求被抛出到node.js服务器,该服务器从MongoDB获取一个巨大的集合(约2百万个文档)并将其作为流式响应发送到客户端。
问题:当集合很小时工作正常。但是对于大集合,客户端显示JSON解析错误。
服务器端摘录:
var first = true;
res.setHeader("Content-Type", "application/json");
res.write('"data" : [');
var stream = Datasource.db.collection(*collectionName*).find(*filterJson*).stream();
stream.on('data', function(doc) {
var prefix = first ? '' : ', ';
res.write(prefix + JSON.stringify(doc));
console.log(prefix +JSON.stringify(doc));
first = false;
});
stream.on('end', function() {
res.write(']}');
console.log(']}');
res.end();
});
客户端错误:
SyntaxError: Unexpected end of JSON input
at JSON.parse (<anonymous>)
at Response.Body.json (http.umd.js:777)
at MapSubscriber.eval [as project] (datasources.services.ts:28)
at MapSubscriber._next (map.ts:75)
at MapSubscriber.Subscriber.next (Subscriber.ts:95)
at XMLHttpRequest.onLoad (http.umd.js:1180)
at ZoneDelegate.invokeTask (zone.js:275)
at Object.onInvokeTask (core.umd.js:3971)
at ZoneDelegate.invokeTask (zone.js:274)
at Zone.runTask (zone.js:151)
at XMLHttpRequest.ZoneTask.invoke (zone.js:345)
这是chrome调试工具的快照:
如何让我的客户端监听任何数量的流式响应。我可以以某种方式增加响应时间吗?我尝试做响应.timeout = 300000秒,但没有帮助。