javascript 如何在axios中忽略拦截器作为参数?

nwnhqdif  于 2023-05-12  发布在  Java
关注(0)|答案(4)|浏览(125)

我有axios拦截器,是否可以通过调用axios方法来忽略一个请求的拦截器?
类似于:axios.post('/path/foo', null, { ignoreInterceptors: true } })

axios.interceptors.response.use(
  (response) => {
    return response;
  },
  (error) => {
    return Promise.reject(error);
  }
);
vwkv1x7d

vwkv1x7d1#

而不是:

axios.post('/path/foo')

您需要:

const uninterceptedAxiosInstance = axios.create();
uninterceptedAxiosInstance.post('/path/foo')

没有任何东西会拦截这个请求

owfi6suc

owfi6suc2#

在拦截器请求中,你可以像这样检查覆盖:

axiosInstance.interceptors.request.use(
  (config) => {
    const accessToken = getAuthToken();

    config.headers!["Authorization"] =
      config.headers && config.headers["Authorization"] !== undefined
        ? config.headers["Authorization"]
        : accessToken;
    config.headers!["Content-Type"] = "application/json";
    config.headers!["Accept"] = "application/json";

    return config;
  },
  (error) => Promise.reject(error)
);

因此,如果你想在一个请求中覆盖授权令牌,但仍然想使用相同的axios示例,你可以发出这样的请求:

axiosInstance.get(`/endpoint`, {
  headers: { Authorization: "" },
})
2skhul33

2skhul333#

要跳过拦截器配置,您应该在请求配置中添加validateStatusnullfalse

axios.request({
url: 'https://api.example.com',
method: 'get',
validateStatus:null
})
ezykj2lf

ezykj2lf4#

当我需要一些更细粒度的行为时,我使用config对象在拦截器中传递一个带有if的参数。

axios.post(
    url,
    body,
    {
        ignoreGlobalCatch: true,
    },
);
...
async function (error) {
    if (!error.config.ignoreGlobalCatch) {
        //global catch (e.g: Show toast message)
    }
    return Promise.reject(error);
}
...

相关问题