为了模拟和调试失败的HTTP请求,我启动了一个只返回503的nodejs服务器,但在所有情况下,失败对象上的status
属性为0,即使网络选项卡显示正确的statusCode和消息。
以下是进行http调用的angularjs代码:
$http.get( Url )
.then( function( res ) {
//regular code
})
.catch( function onFail ( reason ) {
var errorMsg = "Error from server: " + reason.status + reason.statusText );
})
.finally( function onFinally() {
});
状态为0的原因是什么?
答案 0 :(得分:0)
原因是请求被中止。可能您没有与Internet连接,或者由于某些原因您的网络应用无法读取您的返回状态(例如状态为“失败”的测试波纹管)或服务器未返回错误。
在角度文档中,他们提到状态0“此外,小于-1的状态代码被归一化为零。-1通常意味着请求被中止,例如使用config.timeout”。
https://docs.angularjs.org/api/ng/service/$http#get
当状态为0或-1的互联网连接断开时,可以设置自定义消息。
.catch(function(error){
//status = HTTP code
if(error.status == -1 || error.status == 0)
error.statusText = "Failed to connect to internet";
var errorMessage = "Ocurred an connection error. Status: '" + error.status + "', message: '" + error.statusText + "'";
return {
success: false,
message: errorMessage
};
});
您可以在浏览器中验证您的回报,就像在我的测试行中看到的那样。