Angular 的订阅未记录完整错误
Angular's subscribe not logging full error
我正在尝试记录来自订阅的错误,但错误似乎...不完整?
我从来没有见过这种问题,在 Google 上也找不到任何东西。代码如下:
this._http.post(this.urlPath, email).subscribe(
res => {
// stuff
},
err => {
console.log(err) // <- I need to log this
}
);
它在一定程度上起作用。当我打开浏览器的控制台时,为了检查错误,我得到的是:
问题是,这里似乎缺少信息。如果我打开“网络”选项卡,同一请求的响应如下所示:
如你所见,真正的响应有更多的信息。我试过使用 {observe: "response"}
,但无济于事。我应该注意,如果我尝试使用 fetch
,响应会完成,但我宁愿使用 HttpClient.
这是怎么回事?
当您收到 http 错误状态代码时,您无法通过与成功案例相同的方式访问服务返回的负载。就像一个特殊的对象。
但是您可以通过在您的服务中使用管道和错误处理程序,像这样访问它。这是它的一个最小示例:
your.service.ts
...
handleError(error) {
return throwError(error.error);
}
return this.http.get ... the rest of your request.pipe(
catchError(this.handleError)
);
...
在您使用服务的地方,您可以在 err 中访问您的错误请求包含的完整响应。
...
, error => {
console.warn(error);
}
或者更好的是,您可以抛出整个对象以访问错误(响应主体)和其余参数,如状态代码。
我正在尝试记录来自订阅的错误,但错误似乎...不完整?
我从来没有见过这种问题,在 Google 上也找不到任何东西。代码如下:
this._http.post(this.urlPath, email).subscribe(
res => {
// stuff
},
err => {
console.log(err) // <- I need to log this
}
);
它在一定程度上起作用。当我打开浏览器的控制台时,为了检查错误,我得到的是:
问题是,这里似乎缺少信息。如果我打开“网络”选项卡,同一请求的响应如下所示:
如你所见,真正的响应有更多的信息。我试过使用 {observe: "response"}
,但无济于事。我应该注意,如果我尝试使用 fetch
,响应会完成,但我宁愿使用 HttpClient.
这是怎么回事?
当您收到 http 错误状态代码时,您无法通过与成功案例相同的方式访问服务返回的负载。就像一个特殊的对象。
但是您可以通过在您的服务中使用管道和错误处理程序,像这样访问它。这是它的一个最小示例:
your.service.ts
...
handleError(error) {
return throwError(error.error);
}
return this.http.get ... the rest of your request.pipe(
catchError(this.handleError)
);
...
在您使用服务的地方,您可以在 err 中访问您的错误请求包含的完整响应。
...
, error => {
console.warn(error);
}
或者更好的是,您可以抛出整个对象以访问错误(响应主体)和其余参数,如状态代码。