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);

任何帮助表示赞赏。

解决方法

HttpInterceptor模式仅适用于HttpClient发送的请求。这意味着EventSource不会被捕获,普通XMLHttpRequest也不会被捕获。最好的办法是将拦截器中请求的实际转换移动到实用程序函数,您可以在拦截器中调用它,也可以在包装了EventSource功能的自定义服务中调用