当我登录时,我无法在拦截器中获取自定义响应头 . console logged the interceptor httpResponse
''Console log response''
HttpResponse {headers:HttpHeaders,status:200,statusText:“OK”,ok:true,...}
HttpHeaders lazyInit:ƒ()lazyUpdate:null normalizedNames:Map(0){} proto :Object ok:true status:200 statusText:"OK" type:4
我们还在服务器端添加了Access-control-expose-header . 我仍然没有得到回复 . 不确定我是否会错过拦截器方法中的某些内容 .
Interceptor method
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
req = req.clone({
setHeaders: {
'Accept': 'application/vnd.employee.tonguestun.com; version=1',
'Content-Type': 'application/json',
}
});
return next.handle(req)
.do((ev: HttpEvent<any>) => {
console.log(ev)
if (ev instanceof HttpResponse) {
console.log(ev.headers);
}
// return ev;
})
}
Custom header in network tab
access-control-allow-credentials:true
access-control-allow-methods:GET,POST,OPTIONS
access-control-allow-origin:*
access-control-expose-headers:access-token,client,expiry,token-type,uid
access-token:haIXZmNWSdKJqN2by7JH1g
cache-control:max-age = 0,private,must-revalidate
客户端:j_2dxD7NVMjGeX8BbBuELA
content-type:application / json;字符集= utf-8的
到期日:1525931943
getting custom headers in network tab
这也是我的服务电话,在电话中添加了观察'响应' .
Service call
return this.http.post(`${environment.baseUrl}${environment.signup}`, data, {observe: "response"})
.map(response => response);
AppModule.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { AppComponent } from './app.component';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { HttpClientModule } from '@angular/common/http';
import { HTTP_INTERCEPTORS } from '@angular/common/http';
import { AppInterceptor } from './services/app-interceptor.service';
import { HomeModule } from './home/home.module';
import { SharedModule } from './shared/shared.module';
import { AppRoutingModule } from './app-routing.module';
import { AuthService } from './services/auth.service';
import { AuthGuardService } from './services/auth-guard.service';
import { FormsModule, ReactiveFormsModule } from '@angular/forms';
@NgModule({
declarations: [
AppComponent
],
imports: [
BrowserModule,
FormsModule,
ReactiveFormsModule,
CommonModule,
HttpClientModule,
BrowserAnimationsModule,
HomeModule,
SharedModule,
AppRoutingModule,
],
providers: [
AuthService,
AuthGuardService,
{
provide: HTTP_INTERCEPTORS,
useClass: AppInterceptor,
multi: true
},
],
bootstrap: [AppComponent]
})
export class AppModule { }
请帮帮我 . 提前致谢!
4 回答
This Stack Overflow answer帮助我们解决了这个问题 . 问题出在nginx配置中 . 我们错过了access-control-expose-header中的always关键字 .
来自文档https://angular.io/guide/http#intercepting-requests-and-responses
看看使用一个新变量,看看如何使用set over req.headers更改 Headers
我面临同样的问题 . 如果您通过
http
调用您的服务它将无法正常工作,因为拦截器不熟悉它请使用httpClient
然后自动拦截检测您的每个请求,拦截器也将您的标头发送到服务器端AppHttpInterceptor.ts
app.module.ts
This imlementation的HttpInterceptor应该对你有帮助 . HttpResponse类具有 Headers 属性,可帮助您读取响应标头 .