#angular #server-sent-events #angular-http-interceptors
#angular #отправленные сервером события #angular-http-перехватчики
Вопрос:
Я написал перехватчик 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);
Любая помощь приветствуется.
Комментарии:
1. Cory указывает, что это для известных запросов клиента Angular. SSE не будет известен Angular. ultimatecourses.com/blog /. …
Ответ №1:
HttpInterceptor
Шаблон работает только для запроса, отправленного HttpClient
. Это означает, что EventSource
это не захвачено, и не является обычным XMLHttpRequest
. Лучшее, что вы могли бы сделать, это перенести фактическое преобразование вашего запроса в вашем перехватчике в служебную функцию, которую вы можете вызвать внутри своего перехватчика и, возможно, в пользовательскую службу, которая оборачивает EventSource
функциональность
Комментарии:
1. Просто любопытно, как утилита получит доступ к запросу на стороне сервера, разве браузер не предотвращает это?
2. У @JohnPeters
EventSource
действительно нет поддержки заголовков. Это можно преодолеть с помощью строки запроса, полизаполнения, которое ее поддерживает, или с помощью функциональностиfetch
потока3. @JohnPeters кроме того, это событие, отправленное сервером, а не запрос рендеринга на стороне сервера 🙂 Я думаю, что именование немного сбило вас с толку
4. Извините, я оговорился, я имел в виду SSE
5. Спасибо за ваш ответ, но я не уверен, что понимаю, что вы имеете в виду, исходя из того, что вы имеете в виду… У вас есть исключения?