Angularjs http catch块响应状态为0,来自自定义服务器

时间:2015-11-04 21:56:18

标签: angularjs http

为了模拟和调试失败的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() {
        });

检查reason对象。
failure object

状态为0的原因是什么?

1 个答案:

答案 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
                };
            });

您可以在浏览器中验证您的回报,就像在我的测试行中看到的那样。

使用错误的网址进行测试,您会注意到以下列状态为“ 404” Test with wrong url

离线测试,您会注意到以下列状态为“失败” Test offline