gpt4 book ai didi

javascript - Axios 拦截器重试发送 FormData

转载 作者:行者123 更新时间:2023-12-05 04:59:03 25 4
gpt4 key购买 nike

我正在尝试为包含 FormData 作为数据的请求创建“重试”功能。重试发生在 JWT token 过期时,我的第二个请求(重试请求)不包含任何数据。

想法:

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 === 401 && !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
}
}
);

如果我的 token 过期,请求将失败,然后拦截器将刷新我的 token ,并使用新 header Authorization 重试完全相同的请求。然而,在服务器端,接收到的负载始终为空。

最佳答案

据我所知,重试时需要重新添加formData(我认为这是由于数据被添加为流并在请求期间被消耗,所以新的重试不能消耗已经消耗的流) .

你可以看看 request.data 明白我的意思。

关于javascript - Axios 拦截器重试发送 FormData,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63662759/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com