Angular 拦截器处理 [object,object]
Angular interceptor handling [object,object]
您好,我正在尝试通过来自我的错误拦截器的 toastr 通知很好地显示 login/register 等的错误。
问题是有时我无法捕捉到所有需要的错误。
这是我的拦截器
export class ErrorInterceptor implements HttpInterceptor {
constructor(private router: Router, private toastr: ToastrService) {}
intercept(
request: HttpRequest<unknown>,
next: HttpHandler
): Observable<HttpEvent<unknown>> {
return next.handle(request).pipe(
catchError((error) => {
if (error) {
switch (error.status) {
case 400:
debugger;
if (error.error.errors) {
const modalStateErrors = [];
for (const key in error.error.errors) {
if (error.error.errors[key]) {
modalStateErrors.push(error.error.errors[key]);
}
}
throw modalStateErrors.flat();
} else {
error.statusText = error.error;
this.toastr.error(error.statusText, error.status);
}
break;
case 401:
error.statusText = 'Unauthorized';
this.toastr.error(error.statusText, error.status);
break;
case 404:
this.router.navigateByUrl('/not-found');
break;
case 500:
const navigationExtras: NavigationExtras = {
state: { error: error.error },
};
this.router.navigateByUrl('/server-error', navigationExtras);
break;
default:
this.toastr.error('Something unexpected went wrong');
console.log(error);
break;
}
}
return throwError(error);
})
);
}
}
问题位于此处:
if (error.error.errors) {
const modalStateErrors = [];
for (const key in error.error.errors) {
if (error.error.errors[key]) {
modalStateErrors.push(error.error.errors[key]);
}
}
throw modalStateErrors.flat();
}
这种类型的错误效果很好。
但是当出现多个错误时,问题就来了
或者那样
我尝试了很多方法,但注意似乎有效。那些可以看看吗?我怎样才能捕捉到所有这些类型的错误并正确显示它们
您可能需要执行以下操作:
if(Array.isArray(error.error) {
error.error.forEach( item => {
modalStateErrors.push(item); // or whatever value you need from item
})
}
else {
modalStateErrors.push(error.error);
}
您好,我正在尝试通过来自我的错误拦截器的 toastr 通知很好地显示 login/register 等的错误。
问题是有时我无法捕捉到所有需要的错误。
这是我的拦截器
export class ErrorInterceptor implements HttpInterceptor {
constructor(private router: Router, private toastr: ToastrService) {}
intercept(
request: HttpRequest<unknown>,
next: HttpHandler
): Observable<HttpEvent<unknown>> {
return next.handle(request).pipe(
catchError((error) => {
if (error) {
switch (error.status) {
case 400:
debugger;
if (error.error.errors) {
const modalStateErrors = [];
for (const key in error.error.errors) {
if (error.error.errors[key]) {
modalStateErrors.push(error.error.errors[key]);
}
}
throw modalStateErrors.flat();
} else {
error.statusText = error.error;
this.toastr.error(error.statusText, error.status);
}
break;
case 401:
error.statusText = 'Unauthorized';
this.toastr.error(error.statusText, error.status);
break;
case 404:
this.router.navigateByUrl('/not-found');
break;
case 500:
const navigationExtras: NavigationExtras = {
state: { error: error.error },
};
this.router.navigateByUrl('/server-error', navigationExtras);
break;
default:
this.toastr.error('Something unexpected went wrong');
console.log(error);
break;
}
}
return throwError(error);
})
);
}
}
问题位于此处:
if (error.error.errors) {
const modalStateErrors = [];
for (const key in error.error.errors) {
if (error.error.errors[key]) {
modalStateErrors.push(error.error.errors[key]);
}
}
throw modalStateErrors.flat();
}
这种类型的错误效果很好。
但是当出现多个错误时,问题就来了
或者那样
我尝试了很多方法,但注意似乎有效。那些可以看看吗?我怎样才能捕捉到所有这些类型的错误并正确显示它们
您可能需要执行以下操作:
if(Array.isArray(error.error) {
error.error.forEach( item => {
modalStateErrors.push(item); // or whatever value you need from item
})
}
else {
modalStateErrors.push(error.error);
}