【发布时间】:2019-07-07 10:52:39
【问题描述】:
无法在 Angular 6 拦截器服务中检索响应标头,尽管它在 chrome 控制台网络选项卡中可用。我找到了许多相同的解决方案并将其全部添加,但什么也没发生。我在我的 node.js 服务器中添加了Access-Control-Expose-Headers。
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST');
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type, Authorization,Auth');
res.setHeader('Access-Control-Expose-Headers', 'Autho')
我也在使用 HTTPClient 模块作为 rest api。
Interceptor.ts 文件:
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
const token = sessionStorage.getItem('data');
const id = sessionStorage.getItem('id');
const re = '/login';
// if( !token)
console.log(request.url);
// console.log(new URL(request.url).searchParams.get('userId'));
if (request.url.search(re) === -1) {
request = request.clone({
setHeaders: {
Authorization: token,
Auth: id
}
});
}
return next.handle(request).do((event: HttpEvent<any>) => {
console.log(event);
if (event instanceof HttpResponse) {
// do stuff with response if you want
console.log(event.headers);
// console.log(response.headers);
// console.log(HttpResponse.Headers);
}
}, (err: any) => {
if (err instanceof HttpErrorResponse) {
console.log(err);
if (err.status === 400) {
// redirect to the login route
// or show a modal
console.log('ERROR');
window.location.href = this.messageService.API_ROOT;
}
}
});
}
console.log(event.headers);什么都不打印。
rest-api.ts:
import {Injectable} from '@angular/core';
import {HttpClient, HttpHeaders} from '@angular/common/http';
const httpOptions = {
headers: new HttpHeaders({'Content-Type': 'application/json'})
};
@Injectable({
providedIn: 'root'
})
export class RestApiService {
apiRoot = 'http://localhost:9005';
constructor(private http: HttpClient) {
}
addModule(data) {
return this.http.post(this.apiRoot + '/addModule', data, httpOptions);
}
getModules() {
return this.http.get(this.apiRoot + '/getModules');
}
}
服务器:
res.setHeader('Autho','xxxxxxxxxxxxx');
像这样添加标题。 如何在拦截器中获取 'Autho' 标头字段
【问题讨论】:
标签: angular interceptor