javascript - 处理一个 looooong 的 HTTP 请求(目前使用 axios)
问题描述
我有一台服务器可以转换大文件并将结果上传到云存储。今天我终于达到了这个限制,转换花了一分钟,上传又花了 2 分钟,导致 HTTP 请求很长。Client 是 React 使用 axios 调用 Express 服务器。
我在服务器端遇到的是,大约 2 分钟后,请求再次被调用(没有用户输入)。然后,两个请求在客户端都失败(但在服务器上成功)。结果是同一文件的 2 次转换,以及 2 次无用的上传,因为客户端收到错误通知。
我相信我看到的是一个尝试超时中止重试超时中止序列。我尝试将 a 传递{timeout: 5 * 60 * 1000}
给 axios 以获得 5 分钟超时 - 无济于事。
我们计划将流程更改为异步、带外、Web 套接字等。但在那之前,我如何确保请求不会失败?我需要处理浏览器级别的设置吗?或者使用与 axios 不同的库?
解决方案
感谢所有的评论——你们成功了。中止是由 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;
推荐阅读
- node.js - 如何将项目引用与不同的 tsconfig 文件一起使用?
- java - java.net.UnknownHostException:java.base/java.net.Inet6AddressImpl.lookupAllHostAddr(本机方法)
- node.js - 上传 Cloudinary 后如何裁剪图像?
- angular - Angular 10 - 在订阅中调度 NGXS 动作导致无限循环
- r - 如何使用 Get_Labels 在 R 中正确标记图表上的条形?
- typescript - Using private properties with Module Augmentation in Typescript
- ios - 在 iOS (Flutter) 上调用 Agora RTC SDK 时如何获取麦克风输入流?
- docker - 从 pod 访问 CIFS 文件
- passport.js - 如何解决护照 saml 策略的问题
- express - 在 Nodejs 中使用 Multer 上传图像时出错