angular2客户端无法处理来自服务器的大流量响应

时间:2017-05-19 08:19:21

标签: javascript node.js mongodb angular observable

我有一个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调试工具的快照:

enter image description here

如何让我的客户端监听任何数量的流式响应。我可以以某种方式增加响应时间吗?我尝试做响应.timeout = 300000秒,但没有帮助。

0 个答案:

没有答案