如何在axios中使用200状态代码处理错误?

时间:2019-09-21 13:41:56

标签: axios

我的服务器返回json错误,响应为200-我无法更改它。

例如,响应:

{
    errors: [{ code: "unauthorized" }]
}

另一个没有错误的响应也会返回200状态:

 {
        data: [{ id, name... }]
 }

我使用axios发出http请求以获取数据。

axios({
  url: '//www.mocky.io/v2/5d862b16320000f16d07b36b',
  method: 'GET'
}).then(…).catch(…)

在任何错误到达catch之前,我想在拦截器中处理此错误。 (例如,如果错误是401,则重定向)

所以我构建了这个拦截器,但是我无法触发错误功能。

axios.interceptors.response.use((response: any) => {
    if (response.data.errors) { throw new Error(response.data.errors); return; }
    return response;
}, (error) => {

        console.log('here I want to handle all my errors before it invoke in catch function!'); // <------------

    return Promise.reject(error);
});

我该如何解决?

Example code on stackbliz

代码:

import axios from 'axios';

axios.interceptors.response.use((response: any) => {
    console.log({ interceptor: response.data.errors });
    if (response.data.errors) { throw new Error(response.data.errors); return; }
    return response;
}, (error) => {
    console.log('here I want to handle all my errors before it invoke in catch function!');

    return Promise.reject(error);
});

axios({
  url: '//www.mocky.io/v2/5d862b16320000f16d07b36b',
  method: 'GET',
  //responseType: 'json'
  })
  .then(function (response) {
    // handle success
    console.log({ response });
  })
  .catch(function (error) {
    // handle error
    console.log({ error });
  })
  .finally(function () {
    // always executed
  });

0 个答案:

没有答案