javascript - 覆盖 retry-axios 默认配置

标签 javascript node.js axios

这是用于在 token 验证端点重试失败尝试的代码:

const axios = require('axios')
const rax = require('retry-axios')

try {
    const axiosInstance = axios.create();
    const myRaxConfig =  {
    instance: axiosInstance,
    retry: 4,
    statusCodesToRetry: [[100, 199], [401, 429, 429], [500, 501, 502, 504, 599]],
    httpMethodsToRetry: ['GET', 'HEAD', 'OPTIONS', 'DELETE', 'PUT', 'POST'],
    retryDelay: 100,
    noResponseRetries: 4,
    onRetryAttempt: (err) => {
        const cfg = rax.getConfig(err)
        console.log(`Retry attempt #${cfg.currentRetryAttempt}`);
    }
  }

  axiosInstance.defaults.raxConfig = myRaxConfig
  const interceptorId = rax.attach(axiosInstance);
  //const interceptorId = rax.attach()
  console.log("DOING THIS ONE +++++++++~~~~~~~~~~~~~~~~~~~~~~~")
  const tokenResult = await axiosInstance.post(`${process.env.URL}/api/token/verify`,
    {
      token
    },
  )
}
catch (err) {
   logger.error('encounter error in verify: ', err)
   //logger.error('encounter error in verify: ')

   return false
}

但是,错误日志显示正在使用默认配置 - 因为这是一个 POST 请求,所以没有尝试重试:

错误输出:

 ...
 "headers":{"Accept":"application/json, text/plain, */*","Content-Type":"application/json;charset=utf-8","User-Agent":"axios/0.19.0","Content-Length":252},"transformRequest":[null],"transformResponse":[null],"timeout":0,"xsrfCookieName":"XSRF-TOKEN","xsrfHeaderName":"X-XSRF-TOKEN","maxContentLength":-1,
  "raxConfig":{"currentRetryAttempt":0,"retry":3,"retryDelay":100,"httpMethodsToRetry":["GET","HEAD","PUT","OPTIONS","DELETE"],"noResponseRetries":2,"statusCodesToRetry":[[100,199],[429,429],[500,599]]}}}

axios 请求使用默认的 retry-axios 配置。

如何覆盖默认的raxConfig?

最佳答案

我疯狂地理解为什么像你这样的简单代码无法正常工作。

嗯,我认为库中有一个错误。您可以在 npm library usage 中找到此代码无法正常工作:

const myAxiosInstance = axios.create();
myAxiosInstance.defaults.raxConfig = {
  instance: myAxiosInstance
};
const interceptorId = rax.attach(myAxiosInstance);
const res = await myAxiosInstance.get('https://test.local');

您必须将 raxConfig 对象添加到您的 api 调用才能使事情正常进行。 像这样:

const raxConfig = myAxiosInstance.defaults.raxConfig;
const res = await myAxiosInstance.get('https://test.local', { raxConfig } );

不要忘记在其中添加“实例”属性,否则它不起作用。

关于javascript - 覆盖 retry-axios 默认配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58277409/

相关文章:

javascript - 在不同模块之间调解和共享数据

javascript - 如何在模糊主浏览器窗口的同时将图像显示为叠加层?

javascript - 隐藏可见性 :hidden 占用的额外间距

javascript - 无法将数据发送到 Cloud Firestore

javascript - 使用 Node.js 叠加两个音轨

php - Netbeans PHP/javascript 突出显示

javascript - IntelliJ 卸载了 connect-flash,现在无法再次安装

django - 登录 Django 时 Axios PUT 请求 403 Forbidden

reactjs - React 和 Typescript,Axios 响应的类型?

javascript - 从对象中获取数据