У меня есть приложение, в котором я использую ngXS, перехватчик аутентификации и глобальный обработчик ошибок.У меня есть действие входа в систему и другое действие, где я получаю некоторые сущности с сервера.Auth перехватчик работает нормально, но я хочу использовать обработчик ошибок в случае каждой ошибки, конечно.В перехватчике ошибки отлавливаются и генерируются, но ошибка действия get не отображается в обработчике глобальных ошибок, а при входе в систему - HttpErrorResponse ...
Код:
get(): Observable<any> {
return this.httpClient.get(`${this.backendUrl}get`, this.httpOptions);
}
login(email: string, password: string) {
const param = JSON.stringify({email: email, password: password });
return this.http.post(`${this.backendUrl}login`, param, this.httpOptions);
}
AuthState:
@Action(Login)
login({ patchState }: StateContext<AuthStateModel>, { payload }: Login) {
return this.authService.login(payload.userName, payload.password)
.pipe(tap((result: { jwtBearerToken: string, email: string, expiresIn: number, userId: number }) => {
patchState({ token: result.jwtBearerToken, userName: result.email, expiresIn: result.expiresIn, userId: result.userId });
this.store.dispatch(new Navigate(['/list']));
}))
}
ThingsState:
@Action(Fetch)
getThings({ getState, setState }: StateContext<ThingsStateModel>) {
const state = getState();
this.service.get().subscribe(getResult => {
setState({
...state,
things: getResult
});
});
}
AuthInterceptor:
@Injectable()
export class AuthInterceptor implements HttpInterceptor {
constructor(private store: Store) {}
intercept(req: HttpRequest<any>,
next: HttpHandler): Observable<HttpEvent<any>> {
const token = this.store.selectSnapshot(AuthState.token);
let request: HttpRequest<any> = req;
if (token) {
request = req.clone({
headers: req.headers.set("Authorization",
"Bearer " + token)
});
}
return next.handle(request)
.pipe(catchError((error, caught) => {
// !! this throw is executed in both cases !!
throw error;
return of(error);
}) as any);
}
}
Глобальный обработчик ошибок:
@Injectable()
export class GlobalErrorHandler implements ErrorHandler {
constructor(private injector: Injector) { }
handleError(error: Error) {
// this is hit only in the case of errors during the Login action...
}
}
Есть идеи, что попробовать?Спасибо!