Axios HTTP调用始终被视为成功

时间:2018-03-29 20:12:26

标签: javascript http axios

所以我正在尝试多种方法从我的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 = [];
                    }
                });

它正在发挥作用。我会祈祷不会遇到一些问题,我需要处理几个不同的错误。

1 个答案:

答案 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);之后,它工作正常