如何从http端点使用json块的流?

时间:2016-09-06 22:20:28

标签: node.js stream

我有一个将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的最佳方法是什么?

1 个答案:

答案 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()的顺序。