【问题标题】:How to send stream of json object to the client?如何将json对象流发送到客户端?
【发布时间】:2018-12-11 22:00:42
【问题描述】:

这可能是一个重复的问题,但无法找到任何解决方案。我已经尝试在这个快速的时间搜索它,但我不走运。

我的问题是如何将json对象的(如果流是正确的术语,则为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);
}

【问题讨论】:

标签: json angular express stream response


【解决方案1】:

所以我发现上面的示例代码没有问题,也是正确的方法。

当我尝试直接向浏览器打开url API时,可以看到浏览器正在接收数据。

问题出在我用来获取数据的 angular httpclient 库上,如果所有内容都已下载,它将显示数据。

但幸运的是我找到了这个包 oboe.js ,它可以做我想做的事情来传输 json 数据。所以当express js通过res.write()发送数据时,双簧管就能取回数据并准备消费。

你可以做到这么简单。

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.
});

【讨论】:

    猜你喜欢
    • 2015-10-27
    • 2013-11-16
    • 2018-03-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-01-28
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多