首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在axios .catch中获得错误消息

无法在axios .catch中获得错误消息
EN

Stack Overflow用户
提问于 2020-05-23 11:25:33
回答 1查看 3.5K关注 0票数 2

我使用的是React原生版本0.62.2,Axios版本^0.19.2速成版本^4.17.1

在表达中使用

代码语言:javascript
运行
复制
 if (!user) {
  return res.status(404).send({email:'email not exist'})
}

但是事情是在前端(使用axios的本机反应)端,我在catch中得到了以下结果: Error:状态代码404而不是err.response的请求失败

使用axios的本机代码

代码语言:javascript
运行
复制
   export const onLogin = userData => {
  return dispatch => {
    dispatch(onFetching());
    Axios.post(`${Routes.login}`, userData)
      .then(res => {
       console.log(res)
      })
      .catch(err => {
        console.log(err)
      });
  };
};

我在这里做错什么了吗?

,您能用一个演示问题的最小工作示例来更新您的帖子吗?

代码语言:javascript
运行
复制
import axios from 'axios'



const instance = axios.create({
    timeout: 1000,
    validateStatus: function validateStatus(status) {
        let default = status >= 200 && status < 300
        let extra = status == 404
        return default || extra
    }
});


export default instance;

那么到底发生了什么事,听听他的

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-23 12:21:04

,但是事情是在前端(使用axios的本机反应)端,我在catch中得到了以下结果: Error:状态代码404请求失败,而不是err.response。

这是通过设计实现的,当响应的状态代码在默认情况下不在200-299的范围内时,它会抛出一个错误。

可以通过在validateStatus中覆盖axios.create来更改此默认设置。例如,要接受默认允许的状态代码范围+ 404:

代码语言:javascript
运行
复制
const instance = axios.create({
    ...
    validateStatus: function validateStatus(status) {
        let default = status >= 200 && status < 300;
        let extra = status == 404
        return default || extra
    }
});

那么,即使状态代码为404,axios也不会抛出错误。

这是不建议的,但状态代码不是在2xx中意味着要作为错误处理。要获得您应该使用的响应

  • .then(err => console.log(err.response),,在您的例子中,它将是{email:'email not exist'}

Axios默认validateStatus:

代码语言:javascript
运行
复制
  validateStatus: function validateStatus(status) {
    return status >= 200 && status < 300;
  }

Axios错误属性:错误、配置、代码、请求、响应

您可以在这里检查axios的默认值:https://github.com/axios/axios/blob/6642ca9aa1efae47b1a9d3ce3adc98416318661c/lib/defaults.js#L79

createError:https://github.com/axios/axios/blob/master/lib/core/createError.js

更新2:

,但在哪里使用这个实例变量的反应-本机方面的权利。

是的,您可以将它放在单独的文件中,然后导入它。然后,无论何时您想使用axios和这里配置的选项,您都可以导入已经定义的实例,而不是每次都将多个选项传递给axios。

例如:

utils/axos.js

代码语言:javascript
运行
复制
const instance = axios.create({
    ...
    validateStatus: function validateStatus(status) {
        let default_ = status >= 200 && status < 300;
        let extra = status == 404
        return default_ || extra
    }
});
export default instance;

然后不使用:import axios from "axios";使用import axios from "./utils/axios"

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61971296

复制
相关文章

相似问题

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