簡體   English   中英

無法在 Angular 攔截器上獲取 HTTP 標頭

[英]Cannot get HTTP Headers on Angular Interceptor

我在響應中的 nodejs (express) 應用程序中設置自定義標頭:

res.header('Vme','true')
next()

當我收到對客戶端的響應時,我可以在瀏覽器中正確看到標頭: browserHeaders

問題是我無法訪問 angular hhtp 攔截器中的標頭:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
this.loaderService.show()
return next.handle(request)
  .pipe(
    map((event: HttpEvent<any>) => {
      if (event instanceof HttpResponse) {
        const message = event?.body?.message
        if (message?.length) {
          this.toastService.show(event?.body?.message, SeveritiesEmun.Success)
        }
      }
      return event
    }),
    catchError(error => {
      let errorMessage = error?.error || 'Error'
      if (typeof errorMessage === 'object') {
        errorMessage = error?.statusText || 'Error'
      }
      this.toastService.show(errorMessage, SeveritiesEmun.Fail)
      return throwError(errorMessage)
    }),
    finalize(() => {
      this.loaderService.hide()
    })
  )
}

在錯誤 (error) 和成功實例 ((event: HttpEvent )) 中,“headers”屬性不包含任何值。

您必須像這樣處理發送數據:

import { tap } from "rxjs/operators";


next.handle(req).pipe(
    tap((event: HttpEvent<any>): void => {
        if (event instanceof HttpResponse) {
            // do whatever with event
        }
    })
);

然后您可以通過執行 event.headers.has("Vme") 檢查您的 header 是否被應用並通過event.headers.get("Vme") event.headers.has("Vme")訪問它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM