首页 > 解决方案 > 处理一个 looooong 的 HTTP 请求(目前使用 axios)

问题描述

我有一台服务器可以转换大文件并将结果上传到云存储。今天我终于达到了这个限制,转换花了一分钟,上传又花了 2 分钟,导致 HTTP 请求很长。Client 是 React 使用 axios 调用 Express 服务器。

我在服务器端遇到的是,大约 2 分钟后,请求再次被调用(没有用户输入)。然后,两个请求在客户端都失败(但在服务器上成功)。结果是同一文件的 2 次转换,以及 2 次无用的上传,因为客户端收到错误通知。

我相信我看到的是一个尝试超时中止重试超时中止序列。我尝试将 a 传递{timeout: 5 * 60 * 1000}给 axios 以获得 5 分钟超时 - 无济于事。

我们计划将流程更改为异步、带外、Web 套接字等。但在那之前,我如何确保请求不会失败?我需要处理浏览器级别的设置吗?或者使用与 axios 不同的库?

标签: javascriptnode.jsreactjsexpressaxios

解决方案


感谢所有的评论——你们成功了。中止是由 Express 发出的。添加req.setTimeout(5 * 60 * 1000)解决了它。谢谢大家!

更新:在server级别添加超时甚至更好:

//...express middleware + routs + etc...
const server = app.listen(PORT, function() {
  console.log(`listening on ${PORT}`);
});

//set timeout of requests to 5 minutes
server.timeout = 5 * 60 * 1000;

推荐阅读