我正在使用React Native和Axios,它们在iOS上运行完美,但不幸的是在Android上,Axios不会从服务器返回错误响应。
这是我的服务器响应作为原始数据。用代理检查它,它返回没有任何问题(并且也适用于iOS)
HTTP/1.1 400 Bad Request
Date: Tue, 10 Dec 2019 22:07:15 GMT
Server: Apache/2.4.29 (Ubuntu)
Cache-Control: no-cache, private
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 191
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type, X-Requested-With, Authorization
Content-Length: 73
Connection: close
Content-Type: application/json
{"errors":{"email":["email registered before."]}}
这是我的_registerUser()函数,用于调用Web服务
registerUser = (data) => {
return axios({
method: 'post',
url: getEndpoint() + URLS.register,
data: data,
config: { headers: { 'Content-Type': 'multipart/form-data' } }
})
};
这是我称为registerUser和捕获错误的部分。在那部分上,error
只是“网络错误”,并且没有按原样(以及在iOS上也不返回)返回response
键。这可能是什么原因?
registerUser(data)
.then((response) => {
console.log("HANDLE SUCCESSFUL REGISTER ERE");
})
.catch((error) => {
console.log("HANDLE ERROR HERE");
console.log("error object");
console.log(error);
console.log(JSON.stringify(error));
console.log("error.response object");
console.log(error.response);
console.log("---------");
});
非常感谢您的帮助...
我的问题的重要补充:我正在使用拦截器来捕获401错误,例如:可能相关吗? SELF ANSWER::移除拦截器并没有任何改变。
axios.interceptors.response.use(undefined,
error => {
if ((typeof error.response !== "undefined") && (typeof error.response.status !== "undefined") && error.response.status === 401) {
console.log("INVALID API TOKEN DETECTED --- REDIRECTING TO LOGIN");
// do some stuff here
}
return Promise.reject(error);
}
);