Angular HttpClient 抛出错误状态代码
Angular HttpClient thrown error status codes
在 angular 文档中,声明对于“非成功 HTTP 状态”将抛出 HttpErrorResponse。 (See here)
哪些不成功状态/不成功状态范围会抛出错误?
是否存在即使 HTTP 状态为“不成功”,响应仍然有效的情况?
上下文:
在我的特定情况下,我有一个身份验证服务。 RxJs 管道 switchMap 中有一个条件,用于检查状态码是否在 200-399 范围内。这似乎是一个多余的支票。我想知道是否可以删除它。
this.http.get<UserDto>(ConstantUrlName.AUTHENTICATION_URL, {observe: 'response'}).pipe(switchMap((resp: HttpResponse<UserDto>) => {
const user = resp &&
resp.status >= 200 && resp.status < 400 &&
resp.body;
....
}))
根据@jonrsharpe 的评论,我们可以在 angular repository:
中看到答案
// ok determines whether the response will be transmitted on the event or
// error channel. Unsuccessful status codes (not 2xx) will always be errors,
// but a successful status code can still result in an error if the user
// asked for JSON data and the body cannot be parsed as such.
let ok = status >= 200 && status < 300;
可能应该添加到 Angular 的文档中。
在 angular 文档中,声明对于“非成功 HTTP 状态”将抛出 HttpErrorResponse。 (See here)
哪些不成功状态/不成功状态范围会抛出错误? 是否存在即使 HTTP 状态为“不成功”,响应仍然有效的情况?
上下文:
在我的特定情况下,我有一个身份验证服务。 RxJs 管道 switchMap 中有一个条件,用于检查状态码是否在 200-399 范围内。这似乎是一个多余的支票。我想知道是否可以删除它。
this.http.get<UserDto>(ConstantUrlName.AUTHENTICATION_URL, {observe: 'response'}).pipe(switchMap((resp: HttpResponse<UserDto>) => {
const user = resp &&
resp.status >= 200 && resp.status < 400 &&
resp.body;
....
}))
根据@jonrsharpe 的评论,我们可以在 angular repository:
中看到答案// ok determines whether the response will be transmitted on the event or // error channel. Unsuccessful status codes (not 2xx) will always be errors, // but a successful status code can still result in an error if the user // asked for JSON data and the body cannot be parsed as such. let ok = status >= 200 && status < 300;
可能应该添加到 Angular 的文档中。