【问题标题】:Angular 2 http service. Get detailed error informationAngular 2 http 服务。获取详细的错误信息
【发布时间】:2016-12-20 13:19:26
【问题描述】:

对离线服务器执行 Angular2 http 调用并没有在它的“错误响应”对象中提供太多信息,我在 Observable 的 .catch(error) 运算符或订阅错误委托中获得了很多信息(它们实际上都共享相同的信息)。但正如您在控制台的屏幕截图中看到的那样,zone.js 以某种方式显示了实际错误。 那么,我怎样才能得到这个特定的错误信息(net::ERR_CONNECTION_REFUSED)?

谢谢。

【问题讨论】:

    标签: http angular error-handling observable


    【解决方案1】:

    您可以处理错误消息,使其更易于阅读。这肯定也可以扩展:

    public Get() {
        return this.http.get(this.URL).map(this.extractData)
            .catch(this.handleError);
    }
    
    public extractData(res: Response) {
        let body = res.json();
        return body || {};
    }
    
    public handleError(error: any) {
        let errMsg = (error.message) ? error.message :
            error.status ? `${error.status} - ${error.statusText}` : 'Server error';
        console.error(errMsg);
        return Observable.throw(errMsg);
    }
    

    Check out this part of the docs on error handling.

    【讨论】:

    • 不,您不会得到任何指示使用这种方法存在网络连接错误的迹象。
    【解决方案2】:

    只要服务器没有响应,response.status 将始终等于 0(零)

    {
      type: 3, //ResponseType.Error
      status: 0, // problem connecting endpoint
    }
    

    另请注意,当您执行 CORS 请求时,源(浏览器中的 url)未经授权(不在远程端点中配置的允许的主机名列表中),响应将与上述类似,但 type 属性除外将等于 4 = ResponseType.Opaque...

    这意味着已建立连接,但例如,OPTIONS 请求返回的标头不包含源或 HTTPS 请求是从 HTTP 源执行的。

    【讨论】:

    【解决方案3】:

    如果不深入代码,我的期望是如果服务器不可达,那么服务器就不会返回任何响应。因此,Response 对象保持其初始化状态。

    【讨论】:

      猜你喜欢
      • 2014-07-27
      • 2011-01-31
      • 1970-01-01
      • 2018-10-04
      • 1970-01-01
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2012-12-26
      相关资源
      最近更新 更多