问题描述
我编写了一个角度拦截器,将一些标头添加到我的请求中。一切正常,直到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
功能的自定义服务中调用