我有一个将json对象流式传输到端点的服务器。这是一个简化的例子:
app.get('/getJsonObjects', function (req, res) {
res.write(JSON.stringify(json1));
res.write(JSON.stringify(json2));
res.write(JSON.stringify(json3));
res.write(JSON.stringify(json4));
res.write(JSON.stringify(json5));
res.end();
});
然后客户端使用浏览器请求,我正在尝试:
var r = request(url);
r.on('data', function(data) {
console.log(JSON.parse(data));
});
问题是尽管流式传输到有效字符串化JSON的端点块,但我从请求中返回的块只是文本块,不一定与从发送的JSON块的开始/结束对齐服务器。这意味着JSON.parse(数据)有时会失败。
以与写入端点相同的方式流式传输这些json的最佳方法是什么?
答案 0 :(得分:0)
这是一个异步问题。您提供的服务器代码无法保证按该顺序发送数据。
您将不得不在客户端累积块并确定客户端上的块的顺序以供显示,或者您必须在服务器端执行某种累加器方法,然后按顺序输出JSON当他们得到处理。
编辑: 似乎res.write可以采用编码类型" chunked"。因此,尝试将标题字段设置为chunked,然后指定" chunked"在res.write()的编码参数中。 https://nodejs.org/api/http.html#http_response_write_chunk_encoding_callback
如果失败,你可以使用res.write的callback参数创建一个巨大的回调/保证链,以保证res.write()的顺序。