javascript - 处理 looooong HTTP 请求(当前使用 axios)

标签 javascript node.js reactjs express axios

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

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

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

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

最佳答案

感谢所有的评论 - 你们做到了。中止是由 Express 发出的。添加 req.setTimeout(5 * 60 * 1000) 解决了这个问题。谢谢大家!

更新:在服务器级别添加超时效果更好:

//...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;

关于javascript - 处理 looooong HTTP 请求(当前使用 axios),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53422845/

相关文章:

reactjs - 图片不缓存在 create-react-app 项目中

javascript - react hook useState不能存储json或string

javascript - 使用 typescript react useTable 钩子(Hook)

javascript - 通过链接将文本插入文本区域

javascript - 如何以 Angular 异步初始化应用程序

javascript - 如何更改 html 输入中提供的 datetime-local 的模式

node.js - NodeJs ECONNRESET

javascript - 如何为返回表中的每一行添加换行符?

javascript - 如何使用 Webpack 在 JavaScript 中导入 Frontmatter 和 Markdown

javascript - 如何用同位素附加图像