如何在拦截响应时更新 axios 实例?

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

如何更新 axios 实例,同时使用此响应中的数据拦截响应而无需第二个请求?任何请求后的任何响应中都可以收到新令牌。最后收到的令牌应在任何新请求中使用。

const request = (axios as any).create({
  baseURL: mainConfig.apiBaseUrl,
  headers: {
    'Content-Type': 'application/json',
  },
});

// Check token relevance and update if not relevance.
request.interceptors.response.use(response => {
  if (response.headers.token !== undefined) {
    response.config.headers.token = response.headers.token;
  }
  return response;
});
javascript ajax typescript request axios
1个回答
1
投票

在这里,您无法为类似这样的进一步请求进行设置。

您应该使用 globalStorage 或任何其他存储来存储此令牌。

import Store from "Store";

const request = (axios as any).create({
  baseURL: mainConfig.apiBaseUrl,
  headers: {
    'Content-Type': 'application/json',
    'Authorization': Store.token
  },
});

// Use latest token from store
axios.interceptors.request.use(function (config) {
    const {token} = Store;
    config.headers.Authorization = token;
    return config;
  }, function (error) {
    return Promise.reject(error);
  });

// Update token in store
request.interceptors.response.use(response => {
  const {token} = response.headers;
  if (token) {
    Store.setToken(token);
  }
  return response;
}
© www.soinside.com 2019 - 2024. All rights reserved.