sah*_*555 4 node.js express react-native axios
我使用的是 React-native 版本 0.62.2,Axios 版本 ^0.19.2 Express 版本 ^4.17.1
在快递中我使用
if (!user) {
return res.status(404).send({email:'email not exist'})
}
Run Code Online (Sandbox Code Playgroud)
但问题是在使用 axios 的前端(react-native)端,我在 catch 中得到以下信息: [Error: Request failed with status code 404] 而不是 err.response
使用 axios 在 React-Native 端编写代码
export const onLogin = userData => {
return dispatch => {
dispatch(onFetching());
Axios.post(`${Routes.login}`, userData)
.then(res => {
console.log(res)
})
.catch(err => {
console.log(err)
});
};
};
Run Code Online (Sandbox Code Playgroud)
那么我在这里做错了什么吗?
您可以用一个最小的工作示例来更新您的帖子来证明您的问题吗
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;
Run Code Online (Sandbox Code Playgroud)
那么究竟发生了什么,听听他的
但问题是在使用 axios 的前端(react-native)端,我在 catch 中得到以下信息: [Error: Request failed with status code 404] 而不是 err.response
这是设计使然,当响应的状态代码默认不在 200-299 范围内时,它会抛出错误。
您可以通过覆盖来更改此默认validateStatus值axios.create。例如接受默认允许的状态代码范围 + 404:
const instance = axios.create({
...
validateStatus: function validateStatus(status) {
let default = status >= 200 && status < 300;
let extra = status == 404
return default || extra
}
});
Run Code Online (Sandbox Code Playgroud)
那么即使状态码是404,axios也不会抛出错误。
但不建议这样做,状态代码不在 2xx 中意味着将作为错误处理。要获得响应,您应该使用
.then(err => console.log(err.response),在你的情况下将是
{email:'email not exist'}axios默认的validateStatus:
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
}
Run Code Online (Sandbox Code Playgroud)
axios错误属性:错误、配置、代码、请求、响应
您可以在此处检查 axios 的默认值: https: //github.com/axios/axios/blob/6642ca9aa1efae47b1a9d3ce3adc98416318661c/lib/defaults.js#L79
创建错误:https ://github.com/axios/axios/blob/master/lib/core/createError.js
更新2:
但是在react-native方面应该在哪里使用这个实例变量呢?
是的,您可以将其放入单独的文件中,然后导入。然后,每当您想要使用此处配置的选项使用 axios 时,您都可以导入已定义的实例,而不是每次都将多个选项传递给 axios。
例如:
utils/axios.js
const instance = axios.create({
...
validateStatus: function validateStatus(status) {
let default_ = status >= 200 && status < 300;
let extra = status == 404
return default_ || extra
}
});
export default instance;
Run Code Online (Sandbox Code Playgroud)
然后不要使用:
import axios from "axios";使用import axios from "./utils/axios";
| 归档时间: |
|
| 查看次数: |
4293 次 |
| 最近记录: |