Axios拦截器重试发送FormData

原学程将引见Axios拦阻重视试收送FormData的处置办法,这篇学程是从其余处所瞅到的,而后减了1些海外法式员的疑问与解问,愿望能对于您有所赞助,佳了,上面开端进修吧。

Axios拦截器重试发送FormData 教程 第1张

成绩描写

我正在测验考试为包括FormDataAS数据的要求创立"retry"功效。
重试产生在JWT令牌过时时,我的第两个要求(重试要求)没有包括所有数据。

创意:

const axiosInstance = axios.create();

  /**
* Before each request, we'll add a possible retry if the
* request need a refreshed token
*/
  axiosInstance.interceptors.request.use((request) => {
 if (typeof _.get(request, ['retried']) === 'undefined') {
request.retried = false;
 }

 return request;
  });

/**
* After a request with an error, we'll check if the error is a token not refreshed.
* If we didn't already tried to refresh, we'll just fallback to the errorHandler function
*/
  axiosInstance.interceptors.response.use(null, async (error) => {
 const statusCode = _.get(error, ['response', 'data', 'statusCode']);
 const message = _.get(error, ['response', 'data', 'message']);
 const { config: request = {} } = error;

 if (statusCode === 四0一 && !request.retried) {
try {
  const newTokens = await refreshTokens();
  request.retried = true;
  _.set(request, ['headers', 'authorization'], newTokens.accessToken);
  return axiosInstance.request(request);
} catch (e) {
  return error;
}
 }
 return error;
  });

要求:

  const formData = new FormData();
  formData.append('name', name);
  formData.append('file', fs.createReadStream(file.path));

  axiosInstance.post(
'http://localhost/upload',
formData,
{
  headers: {
 ...formData.getHeaders(),
 authorization: tokens.accessToken
  }
}
 );

假如我的令牌过时,要求将掉败,而后拦阻器将刷新我的令牌,并仅应用新的标头Authorization重试完整雷同的要求。然则,在办事器端,支到的有用背载一直为空。

推举谜底

据我所知,FormData须要在重试时从新添减(我以为这是由于数据因此流的情势添减的,在要求进程中被花费了,所以新的重试不克不及花费曾经花费的流)。

您不妨检查request.data,懂得我的意思。

佳了闭于Axios拦阻重视试收送FormData的学程便到这里便停止了,愿望趣模板源码网找到的这篇技巧文章能赞助到年夜野,更多技巧学程不妨在站内搜刮。