如果有 401 响应, Angular 拦截器会注销应用程序吗?

标签 angular typescript angular-http-interceptors

在我的拦截器中,我想在响应上放置一个管道,并在响应状态代码为 401 时进行注销,但问题是当我放置 catchError 时,可观察的不是 HttpEvent 类型,并且拦截函数期望返回该类型?

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    const authToken = `Agency ${this.auth.token}`;
    const requestWithHeaders = req.clone({ setHeaders: {'Content-Type': 'application/json'}});
    if (!!this.auth.token) {
        const authReq = requestWithHeaders.clone({ setHeaders: { Authorization: authToken} });
        return next.handle(authReq).pipe(
            catchError(er => {
                if (er.status === 401) {
                    this.auth.logout();
                }
                return er;
            })
        );
    } else {
        return next.handle(requestWithHeaders);
    }
}

}。

最佳答案

抛出一个新的错误,该错误将被转发,而不仅仅是返回错误:

import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators'

...

catchError(er => {
    if (er.status === 401) {
        this.auth.logout();
    }
    return throwError(er);
})

关于如果有 401 响应, Angular 拦截器会注销应用程序吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54925571/

相关文章:

node.js - tsc(TypeScript 编译器)和 ts-node 有什么区别?

javascript - 在 Angular 中使用 google-diff-match-patch

angular - 多: true attribute of HTTP_INTERCEPTORS mean?是什么意思

angularjs - 使用拦截器处理 Angular HTTP错误

javascript - Angular $http promise 无法解析

css - Angular在使用View封装时没有封装css

javascript - Angular routerLink 错误解析链接地址

javascript - Angular Universal 和浏览器功能检查

javascript - 来自本地服务器上项目的 servlet 的 Angular Http.get 请求(json 数据正确返回,但不显示,可以与模拟 api 一起使用)

javascript - Angular 如何将表单组添加到 TR 组件?