我正在用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函数将错误的请求错误捕获为错误。
我应该如何正确解决此问题?
答案 0 :(得分:0)
您可以使用.*
中的throwError()
,因此,如果响应为rxJs
,则只抛出一个错误并将其捕获到400
中,所以如果再加上1,则错误代码为service
的{{1}}的条件,如下所示:
Bad Request