我使用带有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
事件处理程序发回的事件?答案 0 :(得分:0)
大卫。你不能这样做。您可以使用PUT request来定义数据的去向。例如。 PUT /API/upload/1234
。然后,您可以将您的事件源指向服务器以获取更新。
new EventSource("/API/upload/1234");
这样服务器就可以报告作业的过程。