Angular HttpClient - как конвертировать из Http: JSON.parse (JSON.stringify (data)) ._ body)?

При использовании модуля Http используется такая конструкция:

HTTP-сервис:

let tokenUrl1 = this.apiUrl + 'login';
let headers1 = new Headers({'Content-Type': 'application/json'});
return this.http.post(tokenUrl1, JSON.stringify(model), {headers: headers1});

Вызов службы:

this.loginService.sendCredential(this.model).subscribe(
  data => {
    // Next statement ... how to convert this for use in an HttpClint environment??
    localStorage.setItem("token", JSON.parse(JSON.stringify(data))._body);

Хороший модуль HttpClient анализирует тело содержимого http с помощью JSON, возвращающего объект. Хороший!

Как можно переписать отмеченный оператор «JSON.parse (JSON.stringify (данные)) ._ тело)», чтобы он хорошо вписался в среду HttpClient?

data._body? Зачем вы структурируете и разбираете?
Bennett Hardwick 14.08.2018 07:34

Это утверждение было в курсе по соединению Spring Boot и Angular с безопасностью JWT. Отлично работает год. Но я не могу использовать его в среде HttpClient. Когда я вижу в Интернете, это особая (глубокая копия?) Конструкция. Вот почему я задал вопрос.

user9835597 14.08.2018 07:41
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
8 263
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать ответ как объект JSON напрямую, чтобы получить подобное значение.

this.loginService.sendCredential(this.model).subscribe(
  data => {
    let res = data.json();
    let tokenValue = res['token']; // based on your json response...
    localStorage.setItem("token", tokenValue);
}

И если вы используете api-call с типом, тогда ... (из Angular Doc)

showConfig() {
  this.configService.getConfig()
    .subscribe((data: Response) => {
    // like data.xyz properties of 'Reponse' class
    // here you can get values from Your 'Reponse' class directly instead of parsing as above.
  });
}

Надеюсь это поможет.

Спросите меня, если какой-либо вопрос.

Сообщение HttpClient возвращает объект напрямую. В подобных случаях мне не приходилось выполнять data.json (). Итак, я полагаю, что на этот раз json () не нужен / не нужен в HttpClient?

user9835597 14.08.2018 07:43

Если вы используете тип с api-call. тогда вы можете сослаться на официальный документ angular.io/guide/http#getting-json-data.

Chintan Joshi 14.08.2018 07:47

Спасибо, пожалуйста, уточните в своем ответе, что вы имеете в виду под «использованием типа с вызовом api. Обычно я ожидаю типизированных вызовов api с синтаксисом типа httpClient.get <UserResponse> (...)».

user9835597 14.08.2018 08:09

Вы можете добавить наблюдение в шапку.

let tokenUrl1 = this.apiUrl + 'login';
let headers1 = new Headers({'Content-Type': 'application/json'});
return this.http.post(tokenUrl1, JSON.stringify(model), {
   headers: headers1,
   observe: 'response'
});

И

this.loginService.sendCredential(this.model).subscribe(
  data => {
    console.info(data.body);
Ответ принят как подходящий

Вы можете управлять возвращаемым типом строки - этого достаточно, например, для жетоны:

let tokenUrl2 = this.apiUrl + 'users';
let getHeaders = new HttpHeaders({'Authorization':'Bearer '+token});
return this.httpClient.get(tokenUrl2, { observe: 'body', responseType: 'text', headers: getHeaders})

Другие вопросы по теме