在所有可能性之間,我真的迷失在 Angular 11 中: Observable, Promise, Subscribe...
我只想從 get api 呼叫基于狀態代碼的布爾回應。這個呼叫只是為了檢查令牌是否已經正確重定向到用戶。
這是嘗試之一:
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router, private userService: UserService ) {}
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if ( route.url.toString() === 'modifyPassword' ) {
const resp = this.userService.canModifyPassword( route.queryParams.username, route.queryParams.token );
} else {
//
}
}
}
export class UserService {
constructor(private httpClient: HttpClient) {}
canModifyPassword( username: string, token: string ): Observable<boolean> {
return this.httpClient.get<HttpResponse<boolean>>(`${API_URL}/users/public/verify/${username}/${token}` );
}
}
有人在 Angular 11 中獲得了最簡單和最標準的解決方案嗎?
uj5u.com熱心網友回復:
根據 Angular 檔案{ observe: 'response' },您可以通過添加到您的get()方法選項物件來閱讀完整的回應。
在你的情況下,這看起來像,
this.httpClient.get<HttpResponse<boolean>>(`${API_URL}/users/public/verify/${username}/${token}`, { observe: 'response' });
這將回傳一個HttpResponse型別的可觀察物件,而不僅僅是正文。
然后您可以使用 訪問狀態碼response.status。
uj5u.com熱心網友回復:
IMO 最簡單的方法是轉換一個 Promise 并等待,如下所示:
const resp = await this.userService.canModifyPassword( route.queryParams.username, route.queryParams.token ).toPromise();
console.log('got a response of', resp);
uj5u.com熱心網友回復:
我終于找到了回應。它基于 Promise,如 @E.Maggini 回應。
export class AuthGuard implements CanActivate {
constructor(private authService: AuthService, private router: Router, private userService: UserService ) {}
async canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {
if ( route.url.toString() === 'modifyPassword' ) {
const resp = await this.userService.canModifyPassword( route.queryParams.u, route.queryParams.t );
if ( resp ) {
return true;
} else {
await this.router.navigate(['/notAllowed'], {queryParams: {from: 'modifyPassword'}});
return false;
}
} else {
//
}
}
}
export class UserService {
constructor(private httpClient: HttpClient) {}
async canModifyPassword(username: string, token: string): Promise<boolean> {
return this.httpClient.get<any>(`${API_URL}/users/public/verify/${username}/${token}`).toPromise().then(
data => {
console.debug(data); // is null
return true;
}).catch(err => {
console.error(err);
return false;
});
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/467694.html
