我有http拦截器。
import { Injectable, Inject } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpResponse } from '@angular/common/http';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';
import { tap } from "rxjs/operators";
import { ToastrService } from 'ngx-toastr';
import { NgxSpinnerService } from "ngx-spinner";
@Injectable()
export class AppHttpInterceptor implements HttpInterceptor {
constructor(
@Inject('API_URL') private baseUrl: string,
public router: Router,
public toasterService: ToastrService,
private spinner: NgxSpinnerService
) { }
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
// API url
request = request.clone({ url: `${this.baseUrl}/${request.url}` });
// notifications
return next.handle(request).pipe(
tap(evt => {
this.spinner.show();
if (evt instanceof HttpResponse && evt.body && typeof evt.body.success != "undefined") {
if(evt.body.success) {
this.spinner.hide();
this.toasterService.success(evt.body.message);
} else {
this.spinner.hide();
this.toasterService.error(evt.body.message);
}
} else {
this.spinner.hide();
}
})
);
}
}
那里,我正在显示来自后端的烤面包机消息,如果成功为真,那么我显示绿色烤面包机,如果为假,则显示红色烤面包机,表明出了点问题。当从Azure云上托管的nodejs后端api发送的响应状态为200(默认值)时,一切都很好。
context.res = {
body: { success: false, message: `Please add title field` }
};
问题是,例如,如果我发送状态为400的响应
context.res = {
status: 400,
body: { success: false, message: `Please add title field` }
};
然后以某种方式在亩http拦截器的条件
evt instanceof HttpResponse
不执行。但是我不知道为什么。为什么状态码400不是HttpReponse的实例?
return next.handle(req).pipe(
tap(
(res: any) => {// success block},
(error: any) => {// error block}
)
);
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句