You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
en-web/src/app/utils/Interceptor.service.ts

35 lines
1.1 KiB

import {HttpRequest, HttpHandlerFn, HttpEvent, HttpErrorResponse} from '@angular/common/http';
import {catchError, Observable, throwError} from 'rxjs';
import {Router} from '@angular/router';
import {inject} from '@angular/core';
import {USER_TOKEN} from '../data/login/localStorage.namespace';
import {LocalStorageService} from './localStorage.service';
export function InterceptorService(req: HttpRequest<unknown>, next: HttpHandlerFn): Observable<HttpEvent<unknown>> {
const router = inject(Router);
const storage = inject(LocalStorageService);
const headers = req.headers.set('Authorization', String(storage.getItem(USER_TOKEN)));
const newReq = req.clone({headers});
return next(newReq).pipe(
catchError((error: HttpErrorResponse) => {
// 响应错误处理
if (error.status === 401) {
router.navigate(['/error/401']);
}
if (error.status == 403) {
router.navigate(['/error/403']);
}
if (error.status == 404) {
router.navigate(['/error/404']);
}
if (error.status == 500) {
router.navigate(['/error/500']);
}
return throwError(() => error);
})
);
}