服务器发送事件和带有Express.js的HTTP POST 4

时间:2015-08-06 16:02:04

标签: express server-sent-events

我使用带有express.js 4和node.js的busboy通过HTTP POST一组字段值和浏览器中表单上传的文件来接收。然后将处理该文件(提取的数据,在数据库中创建的新文档等),其中一些更新可能不成功。我想要做的是更新用户在处理过程中发生的事情,然后在完成所有操作后更新结果。

要做到这一点,我想使用HTML5服务器发送的事件。在有人建议之前,我不能使用websockets。

当我宣布:

var eventSource = new EventSource('/API/upload');

在我的浏览器中,我在服务器上看到此网址的HTTP GET。我想要的是eventSource监听来自HTTP POST处理程序的服务器发送事件,即接收和处理上传的元数据和文件的路由。我的期望是我可以把app.post(...处理程序放在:

res.writeHead(200, {
  'Content-Type': 'text/event-stream',
  'Cache-Control': 'no-cache',
  'Connection': 'keep-alive'
});
res.write('\n');

然后使用以下方式下推状态更新:

res.write(message'\n\n');
res.flush(); // I'm using compression

在完成所有处理,更新等之后,最终终止与res.status(200).end();的交换。但是当然浏览器没有收听那个EventSource,它正在GET路径上监听一个

那么,我该怎么做:

  • 使用EventStream对象配置浏览器,当我实例化时,该对象不会自动发出GET请求吗?
  • 而是侦听从服务器上的POST事件处理程序发回的事件?

1 个答案:

答案 0 :(得分:0)

大卫。你不能这样做。您可以使用PUT request来定义数据的去向。例如。 PUT /API/upload/1234。然后,您可以将您的事件源指向服务器以获取更新。

new EventSource("/API/upload/1234");

这样服务器就可以报告作业的过程。