【问题标题】:Proper error handling for Angular 2 http result [duplicate]Angular 2 http结果的正确错误处理[重复]
【发布时间】:2016-08-01 00:55:20
【问题描述】:

我一直在使用 angular.io 文档中使用的 http 错误处理策略:

getHeroes () {
    return this.http.get(this._heroesUrl)
                    .map(res => <Hero[]> res.json().data)
                    .catch(this.handleError);
    }
    private handleError (error: Response) {
        console.error(error);
        return Observable.throw(error.json().error || 'Server error');
    }
}

在某些情况下,我将收到 204 状态代码(无数据),而不是 JSON 响应。在这种情况下,直到无法通过res.json() 解析结果时才会调用错误处理程序,因此传递给handleError 的错误是“error.json is not a function”

如何查询响应流以检查 200(OK)状态代码或响应标头内容类型为“application/json”,并使用更相关的错误消息向错误处理程序发出信号?

【问题讨论】:

  • 谢谢,我错过了那个。对于其他人,请注意,自 alpha 47 以来的错误处理行为仅适用于低于 200 和高于 299 的状态代码。由于我的状态代码是 204(未找到),我仍然需要手动抛出错误,如“alpha 46 及以下”​​。
  • 呃,HTTP 响应 204 是“无数据”(“未找到”是 404)。
  • 是的,对不起,我的意思是“没有数据”。

标签: http angular rxjs


【解决方案1】:
http .get('Some Url') .map(res => { 
// If request fails, throw an Error that will be caught 
if(res.statu != 200) { 
throw new Error('This request has failed ' + res.status); } // If everything went fine, return the response 
else {return res.json(); 
} })

这可能会对您有所帮助。

这只是为了了解如何使用响应中的状态,您可以根据您的要求进行修改。

错误仅针对非 200 代码检查此commit

【讨论】:

    猜你喜欢
    • 2017-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-16
    相关资源
    最近更新 更多