Как выполнить цикл через HttpHeaders в запросе и добавить все отсутствующие в новую переменную заголовка

#angular #typescript #http-headers #httprequest

#angular #typescript #http-заголовки #httprequest

Вопрос:

Это для проекта angular 6.

Для начала я вызываю следующий метод, устанавливаю новый заголовок и выполняю запрос get:

 public getExposurePageDetailByExposureId(caseId, EditMode): Observable<any> {
    let headers = new HttpHeaders().set('EditMode', EditMode);
    return this.httpClient.get(this.url.getExposurePageDetailByExposureIdUrl   "/"   caseId, {headers});
  }
  

После обработки запроса он проходит через файл httpInterceptor.ts . Это анализирует кучу информации о запросе.

В этом файле создается новая переменная HttpHeaders:

 var authHeader = "Bearer "   this._cookieService.get('userToken');
var userId =  this._cookieService.get('userId') == "" ? "0": this._cookieService.get('userId');
var centreId =  (this._cookieService.get('centerId') == "" || this._cookieService.get('centerId') == "null")? "0":this._cookieService.get('centerId');
var headers = new HttpHeaders({
    'Authorization': authHeader,
    'userId':userId,
    'centreId': centreId
  });
  

После этого я хотел бы сравнить текущие заголовки запроса с новой сформированной headers переменной.

Идея в том, что я беру EditMode заголовок (имя и значение) и добавляю его в headers .

 //req being the current request being processed with the EditMode header in it.
for(var hd in req.headers){
  if (headers does not contain hd.headername){
    //add header
    headers = headers.set('hd.headername', hd.headervalue);
  }
}
  

Как я могу сформировать этот цикл обработки?

РЕДАКТИРОВАТЬ: использование следующего приводит к ошибке:

 req.headers.keys().forEach(h=> {
              console.log(h);
              console.log(req.headers.get(h));
              })
  

введите описание изображения здесь

Дальнейшее обновление:

Вышеуказанная ошибка была вызвана обработчиком ошибок, поэтому вывод не очень полезен, фактическая ошибка заключается в следующем:

введите описание изображения здесь

По-видимому, req.headers.keys() не может быть зациклен, однако, когда я запрашиваю keys функцию в отладчике, возвращает следующее, что она должна возвращать массив:

введите описание изображения здесь

Во что бы то ни стало, похоже, что это должно сработать.
Есть множество других запросов, которые он обрабатывает без проблем … вероятно, потому, что ни один из них ничего не установил в ключах

Ответ №1:

Ниже приведен пример того, как это может быть реализовано:

  headers1.keys().forEach(key => {

   if (!headers2.has(key)) headers2.set(key, headers1.get(key))

 })
  

Или даже короче:

 headers1.keys().forEach(k => !headers2.has(k) amp;amp; headers2.set(k, headers1.get(k)))
  

Комментарии:

1. Привет, Рафи, я использовал forEach для headers переменной, и она прошла через цикл нормально, но forEach не работает для req.headers.keys() . Можете ли вы придумать какую-либо причину для этого?

2. Что вы имеете в виду, не работает? что это возвращает?

3. Обновленный вопрос с подробностями

4. В основном это выходит из функции typescript, не уверен, что ошибка имеет какое-либо значение

5. Могу ли я попросить вас создать простой онлайн-пример? Спасибо