所以我正在尝试多种方法从我的axios HTTP调用中获取错误响应状态,并且发生了一些奇怪的事情。
getData() {
axios.get(`/api/article/getObserved.php`, axiosConfig)
.then(response => {
console.log('success');
console.log(response);
})
.catch(err => {
console.log('error');
console.log(err.status);
console.log(err.response.status)
});
}
所以我正在调用我的getObserved端点,虽然它正在返回http_response_code(503);
,但它会转到.then()
部分因为它控制台记录'成功'字符串。
这是从控制台输出的:
获取http://localhost/obiezaca/v2/api/article/getObserved.php 503(服务不可用)
成功favouriteArticles.vue?31bd:83
我已经完成了数百次这样的调用,这个.catch
总是出现错误,即使我不会像其他语言一样抛出异常。不过我也是这样试过的:
getData() {
axios.get(`/api/article/getObserved.php`, axiosConfig)
.then(response => {
console.log('success');
console.log(response);
}, function (err) {
console.log('error');
console.log(err.status);
console.log(err.response.status);
})
.catch(err => {
console.log('error');
console.log(err.status);
console.log(err.response.status)
});
}
但它仍然没有控制台'错误',尽管我从我的端点返回了这个错误的503请求。为什么呢?
我还想补充一点,我不认为my endpoint无法正常工作,因为我正在测试它并通过cURL和POSTMAN手动测试,一切都很好。
编辑,因为当我没有从我的端点获取数据并且我只需处理一个错误(有数据或没有)时,响应是未定义的,我只是做了类似这样的事情:
getData() {
axios.get(`/api/article/getObserved.php`, axiosConfig)
.then(response => {
if(response) {
this.articles = response.data.records;
} else {
this.noFavourite = true;
this.articles = [];
}
});
它正在发挥作用。我会祈祷不会遇到一些问题,我需要处理几个不同的错误。
答案 0 :(得分:3)
此问题与我的httpInterceptor
有关import axios from 'axios';
import { store } from '../store/store';
export default function execute() {
axios.interceptors.request.use(function(config) {
const token = store.state.token;
if(token) {
config.headers.Authorization = `Bearer ${token}`;
//console.log(config);
return config;
} else {
return config;
}
}, function(err) {
return Promise.reject(err);
});
axios.interceptors.response.use((response) => {
return response;
}, (err) => {
console.log(err.response.status)
return Promise.reject(err); // i didn't have this line before
});
}
它没有在错误响应上返回承诺所以在承诺http调用后它以某种方式将其视为成功。在我的拦截器中添加return Promise.reject(err);
之后,它工作正常