Немного предыстории, у меня есть Golang бэкэнд-микросервис, который обрабатывает операции CRUD для сообщений. Я протестировал его с Postman, браузером, и он делает то, что ему нужно. Проблема возникает, когда я ie подключаюсь к интерфейсу Angular для развертывания. Достаточно сказать, что бэкэнд правильно выставляет заголовок CORS в ответе, а также запрашивает у клиента ключ авторизации, чтобы что-то сделать с микросервисом. Этот ключ необходимо передать через заголовок. Теперь, поскольку каждый мой запрос будет нуждаться в каком-то ключе, я решил использовать HTTP-перехватчик Angular для этой работы. Вот что я получил:
В моем post.service на моем Angular внешнем интерфейсе
allPosts(): Observable<HttpResponse<Post[]>> {
const url = environment.POST_SERVICE_URL + '/user/post';
console.log('Hitting URL: ' + url + ' with key: ' + environment.POST_SERVICE_KEY);
return this.http.get<Post[]>(url, {observe: 'response'}).pipe(catchError(this.handleError));
}
А затем в перехватчике:
@Injectable()
export class AppHttpInterceptor implements HttpInterceptor {
constructor() {
}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
console.log(req);
const r = req.clone();
r.headers.set('Authorisation-Key', environment.POST_SERVICE_KEY);
return next.handle(r);
}
}
И мой модуль приложения :
@NgModule({
declarations: [
AppComponent,
PostsComponent,
],
imports: [
BrowserModule,
AppRoutingModule,
HttpClientModule
],
providers: [{
provide: HTTP_INTERCEPTORS,
useClass: AppHttpInterceptor,
multi: true
}],
bootstrap: [AppComponent]
})
export class AppModule { }
Итак, я ожидаю, что перехватчик клонирует запрос, затем добавит ключ к этому клонированному запросу и отправит его. По крайней мере, это мое понимание того, как работает этот перехватчик. Ну, это на самом деле не работает. Мой бэкэнд не получает ключ и просто выдает ошибку. Проблема не в бэкэнде, потому что, если я вручную включу заголовок авторизации (через надстройку Firefox), он выведет ключ правильно и сможет продолжить работу в обычном режиме. Только когда я использую перехватчик, все становится грушевидным.
Теперь, возможно, вы увидите, что я здесь что-то не так делаю; почему angular не устанавливает заголовок и как мне определить, какие заголовки angular на самом деле отправляют? Мне кажется, что Angular переопределяет любые заголовки, которые я вставляю.