防止发布请求超时

时间:2015-02-03 00:36:52

标签: node.js file-upload http-request

我向一个只包含正文中文件名的nodejs服务器发出POST请求。收到请求后,节点会将相应的本地文件上载到Amazon S3存储桶。这些文件有时需要一段时间才能上传,有时请求会超时。如何延长或防止超时发生?

1 个答案:

答案 0 :(得分:2)

您仍可以继续处理上传时将响应发送回浏览器。在完成响应之前,您不必等到上传完成。例如,你可以这样做:

res.end("done");   // or put whatever HTML you want in the response

并且,这将结束帖子回复,浏览器会很高兴。同时,您的服务器继续完成上传。

这样做的好处是浏览器和用户可以快乐地继续他们想做的下一件事,而无需等待服务器完成其业务。我所知道的唯一缺点是,如果上传失败,您就没有简单的方法通知浏览器它失败了(因为响应已经完成)。


超时本身由浏览器控制。它不是您可以直接从服务器控制的东西。如果您不断向浏览器发送数据,那么它可能不会超时。因此,只要上传继续,您就可以这样做:

res.write(" ");

每隔15秒左右作为一种保持活着状态,保持浏览器的快乐并防止其超时。你可能会设置一个15秒的间隔计时器来进行小的数据发送,然后当上传完成时你就会停止计时器。


如果您在发布帖子的浏览器中控制Javascript,则可以在浏览器中使用Javascript设置Ajax调用的超时值。在浏览器中创建XMLHttpRequest对象时,它有一个名为timeout的属性,您可以为异步ajax调用设置该属性。有关详细信息,请参阅MDN