我的 angular 应用程序中有一个 http 错误 intorceptor。我正在从后端捕获所有错误。如何显示所有错误?
I have an http error intorceptor in my angular app. I am catching all errors from the backend. How can I display all the errors?
我知道我可以导航到我想显示错误的组件,但我如何才能真正将错误从拦截器中取出并放入组件中 class。我知道对于组件我必须有一个 属性 来保存我的对象的值以便显示它们,对于那些我已经得到的 post、put、update 或 delete 方法从中获取响应的后端。我对此很陌生,只是想学习最佳实践,我得到的建议是在我的客户端 catch 块中放置一个 router.navigate,它将用户重定向到带有自定义消息的组件,我理解如何做到这一点,但出于测试目的,我想在 api 的后端实际显示自定义错误消息。我是否必须创建一个服务来获取这些服务,或者我是否可以将它们从拦截器中取出?如果我能提前通过 this.Thanks 获得任何帮助或帮助,我将不胜感激。
import {
HttpEvent,
HttpHandler,
HttpRequest,
HttpErrorResponse,
HttpInterceptor
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';
export class ErrorIntercept implements HttpInterceptor {
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
retry(1),
catchError((error: HttpErrorResponse) => {
let errorMessage = '';
if(error.error instanceof ErrorEvent) {
//Client side error
errorMessage = `Error: ${error.error.message}`;
router.navigate('/login');
} else {
//server side error
errorMessage = `Error Status: ${error.status}\nMessage: ${error.message}`;
router.navigate('/login');
}
console.log(errorMessage);
return throwError(errorMessage);
})
)
}
}
您好,只需使用您可以从应用程序的任何部分点击的任何警报消息服务,它就会在您的应用程序中显示为提示消息。
我也使用 ngx-toastr 实现了这个,它是一个 npm 包,只需安装并调用它的服务
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(
private authenticationService: AuthenticationService,
private toastr: ToastrService
) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(catchError(err => {
if (err.status === 401) {
// auto logout if 401 response returned from api
this.authenticationService.LogoutUser();
location.reload(true);
}
this.toastr.error(AppMessages.SOME_THING_WENT_WRONG);
// this.alertService.error('Something went wrong');
const error = err.error.message || err.statusText;
this.GetSetLogForServer(err);
return throwError(error);
}));
}
我知道我可以导航到我想显示错误的组件,但我如何才能真正将错误从拦截器中取出并放入组件中 class。我知道对于组件我必须有一个 属性 来保存我的对象的值以便显示它们,对于那些我已经得到的 post、put、update 或 delete 方法从中获取响应的后端。我对此很陌生,只是想学习最佳实践,我得到的建议是在我的客户端 catch 块中放置一个 router.navigate,它将用户重定向到带有自定义消息的组件,我理解如何做到这一点,但出于测试目的,我想在 api 的后端实际显示自定义错误消息。我是否必须创建一个服务来获取这些服务,或者我是否可以将它们从拦截器中取出?如果我能提前通过 this.Thanks 获得任何帮助或帮助,我将不胜感激。
import {
HttpEvent,
HttpHandler,
HttpRequest,
HttpErrorResponse,
HttpInterceptor
} from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError, retry } from 'rxjs/operators';
export class ErrorIntercept implements HttpInterceptor {
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
return next.handle(request).pipe(
retry(1),
catchError((error: HttpErrorResponse) => {
let errorMessage = '';
if(error.error instanceof ErrorEvent) {
//Client side error
errorMessage = `Error: ${error.error.message}`;
router.navigate('/login');
} else {
//server side error
errorMessage = `Error Status: ${error.status}\nMessage: ${error.message}`;
router.navigate('/login');
}
console.log(errorMessage);
return throwError(errorMessage);
})
)
}
}
您好,只需使用您可以从应用程序的任何部分点击的任何警报消息服务,它就会在您的应用程序中显示为提示消息。
我也使用 ngx-toastr 实现了这个,它是一个 npm 包,只需安装并调用它的服务
@Injectable()
export class ErrorInterceptor implements HttpInterceptor {
constructor(
private authenticationService: AuthenticationService,
private toastr: ToastrService
) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(catchError(err => {
if (err.status === 401) {
// auto logout if 401 response returned from api
this.authenticationService.LogoutUser();
location.reload(true);
}
this.toastr.error(AppMessages.SOME_THING_WENT_WRONG);
// this.alertService.error('Something went wrong');
const error = err.error.message || err.statusText;
this.GetSetLogForServer(err);
return throwError(error);
}));
}