服务器发送事件和 HTTP POST 与 Express.js 4

Server Sent Events and HTTP POST with Express.js 4

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

为此,我想使用 HTML5 服务器发送的事件。在有人建议之前,我不能使用 websockets。

当我声明时:

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

在我的浏览器中,我在服务器上看到 HTTP GET 这个 URL。我想要的是 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 route

那么,我怎样才能:

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

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

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