首页 > 解决方案 > Angular:如何拦截服务器发送的事件请求?

问题描述

我编写了一个角度拦截器来为我的请求添加一些标头。在 SSE 请求之前一切都很好,它没有被拦截!

@Injectable()
export class SessionUserDataInterceptor implements HttpInterceptor {

  constructor(@Inject(SESSION_USER_DATA) private userData: SessionUserData) {}


  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {

    const setHeaders = {};

    if (this.userData.line) {
      setHeaders['Line'] = this.userData.line;
    }

    if (this.userData.profil) {
      setHeaders['Profil'] = this.userData.profil.id;
    }

    return next.handle(request.clone({setHeaders}));
  }
}

SessionUserData只是SessionStorage.

我尝试将标头添加到我的 SSE 连接,但它也不起作用。

const es = new EventSource(url, {headers: {Line: 'XXX', Profil: 'YYY'}} as any);

任何帮助表示赞赏。

标签: angularserver-sent-eventsangular-http-interceptors

解决方案


HttpInterceptor模式仅适用于由HttpClient. 这意味着EventSource没有被捕获,也不是普通的XMLHttpRequest。你能做的最好的事情是将你的请求在你的拦截器中的实际转换移动到一个实用函数,你可以在你的拦截器中调用它,也许是一个包装EventSource功能的自定义服务


推荐阅读