问题原因可能是因为在Axios拦截器中引起的。在请求发送前,会先发送一个OPTIONS请求进行预检请求,如果服务器允许该请求,才会继续发送正式请求。然而,有些服务器并不支持OPTIONS请求,因此会返回一个404 Not Found错误,而Axios会将这个错误视为请求失败并自动重发请求。
解决方法是可以在Axios的配置中添加一些选项来禁用Axios的自动重试机制,或者设置服务器支持OPTIONS请求。示例代码如下:
禁用Axios的自动重试机制:
axios.defaults.retry = false;
axios.defaults.retryDelay = 1000; // 请求重试的间隔时间
axios.interceptors.response.use(undefined, function axiosRetryInterceptor(err) {
var config = err.config;
if(!config || !config.retry) return Promise.reject(err);
config.__retryCount = config.__retryCount || 0;
if(config.__retryCount >= config.retry) {
return Promise.reject(err);
}
config.__retryCount += 1;
var backoff = new Promise(function(resolve) {
setTimeout(function() {
resolve();
}, config.retryDelay || 1);
});
return backoff.then(function() {
return axios(config);
});
});
让服务器支持OPTIONS请求:
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization, Content-Length, X-Requested-With');
if('OPTIONS' == req.method) {
res.send(200);
}
else {
next();
}
});