这可能是一个重复的问题,但找不到任何解决方案。我已经尝试在此快速时间内进行搜索,但是我很不幸。
我的问题是如何将json对象的 stream (如果stream是正确的术语,则为idk)发送给客户端。
示例我正在读取数据库上的数据,并且每发现5条记录,我就会将数据以json格式发送给客户端。然后使用Angular httpclient lib读取客户端上的数据。
我已经尝试过expressjs response.write()
,但是直到我致电response.end()
,客户端才能够接收数据。
这样做的正确方法是什么?
我正在考虑socket.io,但这太过分了。
修改
其他示例
function getData(res: Response, req: Request):void {
for(let i = 0; i<100; i++{
res.write(JSON.stringify({data:1}) + '\n');
}
res.end(); // There is data received on the browser until this was called.
}
或者类似的东西。我原以为数据会每隔1秒钟到达一次,但10秒钟后它们会同时出现。
function getData(res, req){
const s = setInterval(()=>{
res.write(JSON.stringify({value: 'test value'}));
}, 1000);
setTimeout(()=>{
clearInterval(s);
res.end();
}, 10000);
}
答案 0 :(得分:0)
所以我发现上面的示例代码没有问题,并且是正确的方法。
当我尝试直接向浏览器打开url API时,可以看到浏览器正在接收数据。
问题出在我用来获取数据的有角度的httpclient库上,如果所有内容都已下载,它将显示数据。
但是幸运的是我发现了这个包oboe.js,它可以完成我想要的流json数据的操作。因此,当快速js通过res.write()
发送数据时,oboe将能够检索数据并准备使用。
您可以像这样简单地完成它。
oboe('your url').node('!', data=>{
// process your data here.
// the '!' selector means that oboe will just show the data if it is a valid json.
});