角拦截器不应拦截不良请求

时间:2019-09-17 12:43:16

标签: angular rest http angular-http-interceptors

我正在用Angular 8编写一个Web应用程序,该应用程序从.NET Core后端获取数据。它使用JWT令牌进行身份验证,如果令牌无效,则后端将提供401 Not Authorized错误代码。为了在Angular中解决此问题,我添加了一个http拦截器:

import { Injectable } from '@angular/core';
import {
    HttpRequest,
    HttpHandler,
    HttpEvent,
    HttpInterceptor,
    HttpErrorResponse,
    HttpResponse
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import {catchError, finalize, first, tap} from 'rxjs/operators';
import {AuthenticationService} from "../_services/authentication.service";

@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
    constructor(private authenticationService: AuthenticationService) {
    }

    intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        return next.handle(request).observ((err) => {
                if (err.status === 401) {
                    // auto logout if 401 response returned from api
                    this.authenticationService.logout();
                    location.reload(true);
                }

                const error = err.error.message || err.statusText;

                console.log("Hij komt als allerlaatste hier, waar de error");
                console.log(error);
         });
    }
}

目前,这是正确的。但是,我要添加一个注册页面,如果该电子邮件已经在使用中,则用户应该会收到错误消息。后端然后给出状态码为400 Bad Request的响应,但是我想在自己的代码中收到此错误,并在其中发送请求以正确处理用户消息。

我尝试使用tap(),但是catchError函数将错误的请求错误捕获为错误。

我应该如何正确解决此问题?

1 个答案:

答案 0 :(得分:0)

您可以使用.*中的throwError(),因此,如果响应为rxJs,则只抛出一个错误并将其捕获到400中,所以如果再加上1,则错误代码为service的{​​{1}}的条件,如下所示:

Bad Request