Как получить заголовок ответа на запрос HttpClient.Post в Angular - PullRequest
0 голосов
/ 08 июля 2019

Я использую angular 7, и мне нужно получить "Response Header" из данного API в служебном файле без использования "subscribe". пожалуйста, помогите мне в этом

Я пытался использовать много ответов Google, но ни один из них не помог. Я не могу использовать подписку в файле service.ts, потому что получаю ошибку в файле component.ts, так как мы не можем использовать подписку два раза

login(email: string, password: string ) {
this.email = email;
this.password = password;


return this.http.post<any>(`this.url/auth/login`, { email, password})
.pipe(map(user => {
var currentuser:any = { user: user.user, token: user.token};
if (currentuser && user.token) {
localStorage.setItem('currentUser', JSON.stringify(currentuser));
this.currentUserSubject.next(currentuser);
 }
return user;
 }));

}

Ожидаемый результат:

нужно получить "" заголовок ответа для приведенного выше API. Примечание : «Заголовок ответа» означает - длина содержимого, токен, Content-Type, Etag, etcc

Фактический результат:

Я получаю только тело для этого, а не заголовки

1 Ответ

0 голосов
/ 08 июля 2019

Насколько я понимаю, вы хотели бы:

  • для отправки post запроса и получения данных
  • но также имеют доступ к заголовкам ответа сервера.

Если это правда, вам следует рассмотреть возможность вызова HttpClient.post() с httpOptions = { observe: 'response' }. При этом HttpClient.post() вернет Observable напечатанного HttpResponse, а не только данные JSON.

Рекомендовано к прочтению на Angular Официальные документы

Ваш код должен выглядеть так:

this.http.post<HttpResponse<User>>(`${this.url}/auth/login`, { email, password }, 
  { observe: 'response' }).subscribe(response => {

  ...
  response.headers.keys(); // all header names
  ...
  response.body // response content
  ...

});

ОБНОВЛЕНО

или внутри service method, который будет извлекать только модель User, но будет что-то делать с деталями ответа, например: (может иметь опечатки)

getUserFromLogin(email: string, password: string): Observable<User> {
  return this.http.post<HttpResponse<User>>(`${this.url}/auth/login`, 
    { email, password }, { observe: 'response' }).pipe(
      map(response => {

        ...
        response.headers.keys(); // all header names
        ...
        response.body // response content
        ...

        return response.body;
      })
  )
)
...