angular 5 httpclient, на посте, ответ не возвращает заголовки, только возвращает объект ответа - PullRequest
0 голосов
/ 19 ноября 2018

Я недавно перешел на angular 5, и ранее http.post возвращал объект ответа с заголовками, однако, используя httpclient, он не возвращает заголовки ответа.Как я могу изменить эту часть почтового индекса, чтобы обеспечить полный объект ответа, включая заголовки ответа

Я читал об использовании {observable: "response"}, но он не работает

post(inURL,  data, config = undefined)  {
  let headers, options;
  if (config) {
    options = config;
  } else {
    //headers = this.getDefaultHeader();
    //options = new RequestOptions({ headers: headers });
    options = httpOptions;
  }

  let action = this.httpService.post(inURL,  data, options);
  return new Promise((resolve, reject) => {
    action.subscribe(
      response => resolve(response),
      error => {
        this.interceptError(error);
        reject(error);
      }
    );
  });    
}

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Вы можете просто вернуть ответ HttpClient после выполнения HTTP-вызова:

getServiceData(): Observable<any>{
      return this.httpClient
        .post(myUrl, requestBodyObj)
        .map((httpResponse: any) => {
            if (httpResponse.operationStatus.statusCode === '0') {
                return httpResponse.data;
            } else {
                throw new Error('error in service call');
            }
        })

 }     

В классе вашего компонента вы можете подписаться на метод обслуживания:

myService.subscribe( (data) => {
      // do something with data received
    }, error => {
      // do something when error 
    })

Подробнее о HttpClientиспользование можно увидеть здесь в официальном руководстве

0 голосов
/ 19 ноября 2018

Я предполагаю, что у вас есть очень веская причина для возврата promise вместо Наблюдаемого отсюда.

Как говорится, вы все усложняете здесь. Вы могли бы просто позвонить toPromise() на возвращаемое значение из post.

И вы сказали, что использовали {observable: "response"}, но это не сработало. Это потому, что вы не использовали это правильно. Это ДОЛЖНО БЫТЬ {observe: "response"} и НЕ {observable: "response"}

Это должно быть частью опций. Поэтому я использовал оператор распространения (...) и добавил {observe: "response"} к options.

Попробуйте:

post(inURL,  data, config = undefined)  {
  let headers, options;
  if (config) {
    options = config;
  } else {
    //headers = this.getDefaultHeader();
    //options = new RequestOptions({ headers: headers });
    options = httpOptions;
  }

  options = { ...options, observe: 'response' };

  this.httpService.post(inURL, data, options)
    .toPromise();
}
...