在node.js express中通过部分发送数据

我正在寻找网站和文件的node.js express模块,似乎没有办法按部分发送数据。 我有一个文件渲染速度不是很快,我想在渲染一切之前发送它的一部分。

所以这是我的问题:

  1. 是否有一个response按部分发送数据的方法?
  2. response.end()什么?
  3. 如果没有办法按部分发送数据 – 背后的理由是什么? 如果这是真的,我会说它看起来比非阻塞更多的阻塞。 浏览器可以更快速地加载信息,如果数据更早。

示例简化代码:

 app.get(..) { renderFile(file, function(data) { response.send(data); }); response.end(); ) 

这段代码只发送第一个数据块。 我检查了 – 数据正确的,callback被称为不止一次。

当然我可以将数据附加到一个variables,然后写入response.send(data); 但我不喜欢这种方法 – 这不是它应该工作的方式。

response对象是可写的stream。 只需写入它,Express甚至会自动为您设置分块编码。

 response.write(chunk); 

如果创build这个“文件”是可读的stream,你也可以pipe道。 http://nodejs.org/api/stream.html

Express延伸连接,扩展HTTP我相信。 看看HTTP API ,看起来你正在寻找的是response.write ,它将一大块数据作为响应主体来发送。 然后我相信你可以使用response.end结束信号。

响应对象可以写入。 在你的情况下,以下将是一个解决scheme:

 renderFile(file, function(data) { response.send(data); }); response.end(); 

如果你有机会把文件作为一个stream,这可以进一步精简:

 file.getReadableStream().pipe(response);