处理 Angular HTTP 请求

问题描述 投票:0回答:1

这是我的

getRefreshToken
服务方法:

getRefreshToken(): Observable<AuthResponse> {
    return this.http.post<AuthResponse>(
      `${environment.WEBSITE_API_NEW_URL}/${environment.NEW_REFRESH_AUTH_TOKEN_PARAM}`,
      {},
      { observe: 'response' }
    ).pipe(
      map((response) => {
        if (response.status === 200) {
          const data = response.body;
  
          this.storage.set('access_token', data.accessToken);
          this.storage.set('refresh_token', data.refreshToken);
          this.storage.set('ttl', (Date.now() + 5 * 1000).toString());
  
          return data;
        }
        throw new Error('Failed to refresh token');
      }),
      catchError((error) => {
        console.error('Error refreshing token:', error);
        // this.logout();
        return throwError(error);
      })
    );
  }

这是我在拦截器中的

handleTokenExpired
方法:

private handleTokenExpired(
    req: HttpRequest<any>,
    next: HttpHandler,
  ): Observable<HttpEvent<any>> {
    return this.authService.getRefreshToken().pipe(
      switchMap(() => {
        const newAccessToken: string = this.storage.get('access_token');
        const newRefreshToken: string = this.storage.get('refresh_token');

        return next.handle(this.addToken(req, newAccessToken, newRefreshToken));
      }),
      catchError((error) => {
        console.error('Error handling expired access token:', error);
        return throwError(error);
      }),
    );
  }

这样,来自

getRefreshToken
的 HTTP 请求不会被触发,当我用
subscribe
代替
pipe
时,我在
handleTokenExpired
中收到错误,表示订阅上不存在管道。有人可以帮忙吗?

angular angular-httpclient
1个回答
0
投票

在使用管道的设置中,handleTokenExpired方法需要来自getRefreshToken()的Observable,但由于您尝试在getRefreshToken()内使用subscribe,它不再返回Observable,这会导致错误。

© www.soinside.com 2019 - 2024. All rights reserved.