簡體   English   中英

覆蓋 retry-axios 默認配置

[英]Override retry-axios default config

以下是用於在令牌驗證端點重試失敗嘗試的代碼:

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 請求,因此未嘗試重試:

錯誤 output:

 ...
 "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 庫用法中找到此代碼無法正常工作:

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

您必須將 raxConfig object 添加到您的 api 調用中才能正常工作。 像這樣的東西:

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

不要忘記在其中添加“實例”屬性,否則它不起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM