如何解决角度HTTP拦截器标头值?

时间:2020-04-01 18:40:58

标签: javascript angular http

有点背景,我有一个Golang后端微服务,可以处理帖子的CRUD操作。我已经用Postman,浏览器对其进行了测试,它可以完成所需的工作。当我将它与最终部署的Angular前端捆绑在一起时,就会出现问题。可以说后端正确地在响应中公开了CORS标头,并且还向客户端请求了授权密钥,以便对微服务进行任何处理。该密钥需要通过标头提供。现在,由于我进行的每个请求都需要某种类型的密钥,因此我决定使用Angular的HTTP拦截器来完成此工作。这是我得到的:

在我的Angular前端的post.service中

  allPosts(): Observable<HttpResponse<Post[]>> {

    const url = environment.POST_SERVICE_URL + '/user/post';
    console.log('Hitting URL: ' + url + ' with key: ' + environment.POST_SERVICE_KEY);
    return this.http.get<Post[]>(url, {observe: 'response'}).pipe(catchError(this.handleError));
  }

然后在拦截器中

@Injectable()
export class AppHttpInterceptor implements HttpInterceptor {
  constructor() {
  }

  intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    console.log(req);
    const r = req.clone();

    r.headers.set('Authorisation-Key', environment.POST_SERVICE_KEY);
    return next.handle(r);
  }
}

我的应用模块:

@NgModule({
  declarations: [
    AppComponent,
    PostsComponent,
  ],
  imports: [
    BrowserModule,
    AppRoutingModule,
    HttpClientModule
  ],
  providers: [{
    provide: HTTP_INTERCEPTORS,
    useClass: AppHttpInterceptor,
    multi: true
  }],
  bootstrap: [AppComponent]
})
export class AppModule { }

因此,我希望拦截器克隆请求,然后将密钥添加到该克隆的请求中,然后将其发送出去。这至少是我对这种拦截器如何工作的理解。好吧,它实际上不起作用。我的后端没有收到密钥,只是抛出一个错误。问题不在于后端,因为如果我手动打开授权标头(通过Firefox附加组件),那么它将正确输出密钥,并且能够照常继续。只有当我使用拦截器时,一切都会变成梨形。

现在,也许您可​​以在这里看到我做错了什么;为什么angular不设置标题,我如何诊断实际发送的标题是什么?在我看来,Angular覆盖了我要放入的任何标题。

0 个答案:

没有答案
相关问题