Angular 的订阅未记录完整错误
Posted
技术标签:
【中文标题】Angular 的订阅未记录完整错误【英文标题】:Angular's subscribe not logging full error 【发布时间】:2020-09-30 09:54:17 【问题描述】:我正在尝试从订阅记录错误,但错误似乎...不完整?
我从未见过这种问题,也无法在 Google 上找到任何内容。代码如下:
this._http.post(this.urlPath, email).subscribe(
res =>
// stuff
,
err =>
console.log(err) // <- I need to log this
);
它在一定程度上起作用。当我打开浏览器的控制台时,为了检查错误,我得到的是:
问题是,这里似乎缺少信息。如果我打开“网络”选项卡,相同请求的响应如下所示:
如您所见,真实响应包含更多信息。我试过使用observe: "response"
,但无济于事。我应该注意,如果我尝试使用fetch
,响应就会完成,但我宁愿使用 HttpClient。
这是怎么回事?
【问题讨论】:
【参考方案1】:当您收到 http 错误状态代码时,您无法通过与成功案例相同的方式访问服务返回的负载。就像一个特殊的物体。
但是你可以通过在你的服务中使用管道和错误处理程序来访问它。这是它的一个最小示例:
your.service.ts
...
handleError(error)
return throwError(error.error);
return this.http.get ... the rest of your request.pipe(
catchError(this.handleError)
);
...
在您使用服务的地方,在错误中您可以访问错误请求包含的完整响应。
...
, error =>
console.warn(error);
或者更好的是,您可以抛出整个对象以访问错误(响应正文)和其余参数,例如状态代码。
【讨论】:
这是什么意思?使用HttpClient是绝对不可能的吗?为什么会这样? err => console.log(err._body) ?那只是记录未定义.... 对不起,我用更多信息更新了我的答案,希望对您有所帮助。以上是关于Angular 的订阅未记录完整错误的主要内容,如果未能解决你的问题,请参考以下文章
Angular - Jasmine/karma - 订阅 lambda 表达式未执行