how to throw observable error in angular http interceptor

拜拜、爱过 提交于 2019-12-01 07:03:14

Try doing this in your interceptor

return next.handle(request).map((event: HttpEvent<any>) => {
   if (event instanceof HttpResponse && event.body && !event.body.success) {
     throw new HttpErrorResponse({
                        error: 'your error',
                        headers: evt.headers,
                        status: 500,
                        statusText: 'Warning',
                        url: evt.url
                    });
   }
   return event;
);

Try doing this in your interceptor

return next.handle(request).map((event: HttpEvent<any>) => {
  if (event instanceof HttpResponse && !event.body.success) {
    throw new Error(event.body.message);
  }
  return event;
  );

You can add catch, and handle error

//....
import 'rxjs/add/operator/catch';
import 'rxjs/add/observable/throw';
import 'rxjs/add/operator/map';

@Injectable()
export class TokenInterceptor implements HttpInterceptor {
    constructor(private inj: Injector, private _router: Router) {
    }

    intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
        // Get the auth header from the service.
        const auth = this.inj.get(AuthService);
        const authToken = auth.getSessionData().accessToken || '';
        const duplicate = req.clone({headers: req.headers.set('Authorization', authToken)});
        return next.handle(duplicate).catch(this.handleError);
    }

    private handleError = (response: any) => {
// ....
        // Do messaging and error handling here
        return Observable.throw(response);
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!