首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Axios处理错误

Axios处理错误
EN

Stack Overflow用户
提问于 2018-04-22 15:45:23
回答 11查看 625.4K关注 0票数 291

我试着用Axios更好地理解javascript的承诺。我假装的是处理Request.js中的所有错误,并且只从任何地方调用请求函数,而不必使用catch()

在本例中,对请求的响应将为400,其中包含JSON中的错误消息。

这是我正在犯的错误:

Uncaught (in promise) Error: Request failed with status code 400

我找到的唯一解决方案是在.catch(() => {})中添加Somewhere.js,但我试图避免这样做。有可能吗?

下面是代码:

Request.js

代码语言:javascript
复制
export function request(method, uri, body, headers) {
  let config = {
    method: method.toLowerCase(),
    url: uri,
    baseURL: API_URL,
    headers: { 'Authorization': 'Bearer ' + getToken() },
    validateStatus: function (status) {
      return status >= 200 && status < 400
    }
  }

  ...

  return axios(config).then(
    function (response) {
      return response.data
    }
  ).catch(
    function (error) {
      console.log('Show error notification!')
      return Promise.reject(error)
    }
  )
}

Somewhere.js

代码语言:javascript
复制
export default class Somewhere extends React.Component {

  ...

  callSomeRequest() {
    request('DELETE', '/some/request').then(
      () => {
        console.log('Request successful!')
      }
    )
  }

  ...

}
EN

回答 11

Stack Overflow用户

发布于 2018-08-09 13:26:46

实际上,到目前为止,axios是不可能的。只属于2xx范围的状态码可以在.then()中捕获。

传统的方法是捕获catch()块中的错误,如下所示:

代码语言:javascript
复制
axios.get('/api/xyz/abcd')
  .catch(function (error) {
    if (error.response) {
      // Request made and server responded
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      console.log(error.request);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }

  });

另一种方法可以是在处理请求或响应之前拦截它们。

代码语言:javascript
复制
axios.interceptors.request.use(function (config) {
    // Do something before request is sent
    return config;
  }, function (error) {
    // Do something with request error
    return Promise.reject(error);
  });

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // Do something with response data
    return response;
  }, function (error) {
    // Do something with response error
    return Promise.reject(error);
  });
票数 406
EN

Stack Overflow用户

发布于 2020-03-24 05:22:52

如果您想访问整个错误体,请执行如下所示的操作:

代码语言:javascript
复制
 async function login(reqBody) {
  try {
    let res = await Axios({
      method: 'post',
      url: 'https://myApi.com/path/to/endpoint',
      data: reqBody
    });

    let data = res.data;
    return data;
  } catch (error) {
    console.log(error.response); // this is the main part. Use the response property from the error object

    return error.response;
  }

}
票数 124
EN

Stack Overflow用户

发布于 2020-03-26 14:08:20

你可以这样走:error.response.data

在我的例子中,我从后端获得了error属性。所以,我用了error.response.data.error

我的代码:

代码语言:javascript
复制
axios
  .get(`${API_BASE_URL}/students`)
  .then(response => {
     return response.data
  })
  .then(data => {
     console.log(data)
  })
  .catch(error => {
     console.log(error.response.data.error)
  })
票数 94
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49967779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档