Изменить Content-Type для определенных запросов в Angular 6 - PullRequest
0 голосов
/ 04 июля 2018

У меня есть приложение Angular 6, которое выполняет вызовы API для сервера Node / Express. Я использую перехватчик HTTP, чтобы добавить пару заголовков, необходимых приложению, а также он устанавливает «Content-Type» в «application / json», поскольку все запросы ожидают данные JSON. Новый заголовок выглядит так:

newHeader = {
    withCredentials : true,
    headers: new HttpHeaders ({
      'Content-Type':  'application/json',
      'X_TOKEN_AUTH': authToken,
      'X_IDUSER': user_id
    })
  };

Но теперь мне нужно загрузить изображения на сервер, поэтому один из маршрутов сервера должен ожидать поступления данных не в формате JSON в тело.

Что я хочу сделать, это:

* В приложении Angular добавьте правильный заголовок к запросу POST, например:

const url = `${SERVER_URL}/fileupload`;
const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type':  'application/x-www-form-urlencoded'
  })
};

return this.httpClient.post(url, formData, httpOptions)

* В перехватчике HTTP проверьте, имеет ли запрос заголовок «Content-Type». В этом случае используйте его вместо стандартного application / json. В перехватчике я записал заголовки в запросе, который он получает:

intercept (req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  [....]

  console.log('HTTP REQ:', req.headers);
}

И вот что он печатает:

enter image description here

Как видите, с заголовками ничего не связано. Что может быть не так?

Заранее спасибо,

1 Ответ

0 голосов
/ 04 июля 2018

Следуя совету Элизео, вот что я сделал:

let contentType = 'application/json';

// Check if the incoming request has an specific content type in the header
if (req.headers.has('Content-Type'))
  contentType = req.headers.get('Content-Type');

Теперь я могу использовать contentType, чтобы установить правильный заголовок для маршрута загрузки.

...