简单的http调用Axios ETIMEDOUT错误,为什么?

问题描述 投票:0回答:1

我制作了测试用例演示,您可以使用单个命令克隆和运行:

https://github.com/nemanjam/axios-timeout-error-demo

它并不是每次都会失败,但可能在 70% 的情况下都会失败。令人困惑的是,代码没有做任何特别的事情,它只是通过 url 简单地获取 html 页面。

我假设http服务器正在做一些不寻常的事情,导致Axios客户端触发超时错误。任何其他 http 客户端都会发生同样的情况,例如 fetch。

我尝试设置一些axios配置来防止错误,但没有成功,仍然触发超时异常。

// src/axios-instance.ts

export const axiosConfig = {
  timeout,
  // important to terminate connection and prevent timeout exception
  httpsAgent: new Agent({
    keepAlive: true,
    timeout,
    scheduling: 'fifo',
  }),
};

/** Must use singleton. */
export default class MyAxiosInstance {
  private static instance: AxiosInstance;

  public static getInstance(): AxiosInstance {
    if (!MyAxiosInstance.instance)
      MyAxiosInstance.instance = axios.create(axiosConfig);

    return MyAxiosInstance.instance;
  }
}

你们中的一些人能否使其每次执行可靠、成功的页面获取而不触发任何异常,并提供发生了什么情况的逻辑解释?

node.js http axios
1个回答
0
投票

服务器经常对速率限制请求进行计时,因此您必须对其进行计时。

在 axios 文档页面上有一个示例。

const {data} = await axios.post(LOCAL_SERVER_URL, myBuffer, {
  onUploadProgress: ({progress, rate}) => {
    console.log(`Upload [${(progress*100).toFixed(2)}%]: ${(rate / 1024).toFixed(2)}KB/s`)
  },
   
  maxRate: [100 * 1024], // 100KB/s limit
});
© www.soinside.com 2019 - 2024. All rights reserved.