Angular 4.0.0 http服务在状态为403时不会自动抛出错误
Angular 4.0.0 http service does not throw error automatically when status is 403
正如我在另一个 Whosebug 答案中读到的那样 - 来自 Angular 2 alpha 47 - 当响应状态字段大于 299 时,http 服务应该自动抛出错误。我的问题是在什么阶段?
我收到状态为 403 的 http 响应,但服务似乎允许执行所有 map() 方法。为什么它不将响应重定向到 catch 块?
getLoggedInUser(): Observable<User> {
return this.http.get(this.baseApiUrl + `api/user/me`)
.map((res: Response) => {
console.log(res.status); <-- 403
return res.json();
})
.map((user: User) => new User().deserialize(user)) <-- This method shouldn't be fired, because it causes unexpected behaviour.
.catch((error: any) => {
console.log(error);
if (error.status === 403) {
this.isRequestForbidden = true;
}
return Observable.throw(error || 'Server error')
});
}
Angular 的这个特定方面可能会从早期的 alpha 版本开始改变。在版本 4.3+
中,他们引入了全新的 http 服务来取代旧的。
那么你为什么不检查第一个 .map()
中的 403
状态并在那里抛出错误或其他东西。但基于此 commit 这不应该是个案。
In case if you are on the latest angular like 4.3+
make sure you are
using HttpClient from @anghular/common/http
正如我在另一个 Whosebug 答案中读到的那样 - 来自 Angular 2 alpha 47 - 当响应状态字段大于 299 时,http 服务应该自动抛出错误。我的问题是在什么阶段?
我收到状态为 403 的 http 响应,但服务似乎允许执行所有 map() 方法。为什么它不将响应重定向到 catch 块?
getLoggedInUser(): Observable<User> {
return this.http.get(this.baseApiUrl + `api/user/me`)
.map((res: Response) => {
console.log(res.status); <-- 403
return res.json();
})
.map((user: User) => new User().deserialize(user)) <-- This method shouldn't be fired, because it causes unexpected behaviour.
.catch((error: any) => {
console.log(error);
if (error.status === 403) {
this.isRequestForbidden = true;
}
return Observable.throw(error || 'Server error')
});
}
Angular 的这个特定方面可能会从早期的 alpha 版本开始改变。在版本 4.3+
中,他们引入了全新的 http 服务来取代旧的。
那么你为什么不检查第一个 .map()
中的 403
状态并在那里抛出错误或其他东西。但基于此 commit 这不应该是个案。
In case if you are on the latest angular like
4.3+
make sure you are using HttpClient from@anghular/common/http