【发布时间】:2020-04-17 20:55:43
【问题描述】:
所以我正在尝试实现一个基本的守卫:
canActivate(route: ActivatedRouteSnapshot,
state: RouterStateSnapshot): Observable<boolean> {
return this.userService.isBoardMember().pipe(
map(data => {
if (data === false) {
this.router.navigate(['main']);
return false;
}
return true;
})
);
}
isBoardMember 方法如下所示:
getUserDetails(): Observable<User> {
this.requestUrl = `${configs.bgwssApi}v1/bics/${this.bic}/tcifs/${this.tcif}/users`;
return this.http.get<User>(this.requestUrl).pipe(catchError(this.handleError));
}
isBoardMember(): Observable<boolean> {
return this.getUserDetails().pipe(map(data => {
return (data.userRole === 'BOARD_MEMBER');
}));
}
handleError方法:
private handleError(e: HttpErrorResponse) {
let errorMessage = '';
if (e.error instanceof ErrorEvent) {
// Client side error received
errorMessage = `Error getting user occurred: ${e.error.message}`;
} else {
// Server side error received
errorMessage = `Error getting user from server, code: ${e.status}, message: ${e.message}`;
}
console.error(errorMessage);
return throwError(errorMessage);
}
问题是当getUserDetails http 请求返回 404 错误(没有找到特定用户)时,isBoardMember 方法没有返回任何内容,所以我的守卫没有正确重定向到 main 页面,因为它应该- 相反,它只是加载一个没有 url 的空页面。需要一些帮助来解决这个问题。
【问题讨论】:
-
你能展示
this.handleError方法吗? -
添加到我的问题
-
将
handleError的返回值改为false并检查。
标签: angular typescript angular-router-guards