我在 angular 5 中使用 httpinterceptor 时遇到了奇怪的问题。我无法在 Chrome 中获取错误响应和错误状态代码,但能够在 IE 中获取下面是我的 HttpInterceptor 代码。
import { Injectable } from '@angular/core';
import { HttpInterceptor, HttpRequest, HttpHandler, HttpResponse }
from '@angular/common/http';
import { finalize, tap } from 'rxjs/operators';
@Injectable()
export class LoggingInterceptor implements HttpInterceptor {
intercept(req: HttpRequest<any>, next: HttpHandler) {
const startTime = Date.now();
let status: string;
return next.handle(req).pipe(
tap(
event => {
status = '';
if (event instanceof HttpResponse) {
status = 'succeeded';
}
},
error => {
if(error instanceof HttpErrorResponse) {
console.log(error.error.message)
// Above message is printing in IE but no in chorme.
}
}
),
finalize(() => {
})
);
}
}
在上面的错误 block 中,我可以在 IE 中看到但在 Chrome 中看不到的消息和状态代码。请帮助我如何解决这个问题。
编辑: 我正在使用来自不同来源的数据,并且在 Web 服务中启用了 cors
最佳答案
我发现了这个问题,这是由于在服务器端没有为错误设置响应头。服务器在没有设置响应 header 的情况下直接为错误抛出异常。我在服务器端设置了响应 header ,现在我可以在 chrome 中看到错误消息。
我仍然对 IE 为何能够响应此错误感到困惑。
关于javascript - Chrome 中完整的 Http 拦截器错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51883045/