5
respostas

receber valor de body em uma resposta da API

Dei umas pesquisada nas video aulas e não encontrei, estou com uma dúvida sobre um cenário, onde estou consumindo uma API que me retorna um HTTPResponse com uma mensagem no body. Segue o código abaixo do meu serviço:

testeBody() {
    return this.http
    .get(API + '/api/DatabaseUpdate/TesteDatabase')
    .pipe(tap(res => {      
      console.log(res); // como obter o body aqui?
    }
    ));
  }

Quando eu recebo a resposta não tem opção para receber o body.

5 respostas

Olá Alberto,

Poderia postar o retorno que essa api está trazendo ?

Att,

Lays

Eu consigo simular com o Postman. O retorno é: Status: 200 OK; Em Headers contém: Transfer-Encoding: chunked Content-Type: text/plain; charset=utf-8 Server: Microsoft-IIS/10.0 X-Powered-By: ASP.NET Date: Sat, 04 Apr 2020 17:09:13 GMT No Body contém: Banco de dados atualizado com sucesso.

O resultado de console log segue abaixo:

status: 200
statusText: "OK"
url: "http://localhost:20854/api/DatabaseUpdate/TesteDatabase"
ok: false
name: "HttpErrorResponse"
message: "Http failure during parsing for http://localhost:20854/api/DatabaseUpdate/TesteDatabase"

SyntaxError: Unexpected token C in JSON at position 0 at JSON.parse 
(<anonymous>) at XMLHttpRequest.onLoad 

Mais uma parte que esqueci de postar:

error:
error: SyntaxError: Unexpected token B in JSON at position 0 at JSON.parse (<anonymous>) at XMLHttpRequest.onLoad (http://localhost:4200/vendor.js:7458:51) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:2743:31) at Object.onInvokeTask (http://localhost:4200/vendor.js:36916:33) at ZoneDelegate.push../node_modules/zone.js/dist/zone.js.ZoneDelegate.invokeTask (http://localhost:4200/polyfills.js:2742:36) at Zone.push../node_modules/zone.js/dist/zone.js.Zone.runTask (http://localhost:4200/polyfills.js:2510:47) at ZoneTask.push../node_modules/zone.js/dist/zone.js.ZoneTask.invokeTask [as invoke] (http://localhost:4200/polyfills.js:2818:34) at invokeTask (http://localhost:4200/polyfills.js:3862:14) at XMLHttpRequest.globalZoneAwareCallback (http://localhost:4200/polyfills.js:3888:17)
text: "Banco de dados atualizado com sucesso."

Olá,

Acredito que seja necessário definir um header para a sua chamada na api

ou seja:

const header = {
  'Content-Type': 'application/json',
  'Accept': 'application/json',
  'Access-Control-Allow-Headers': 'Content-Type',
}

testeBody() {
    return this.http
    .get(API + '/api/DatabaseUpdate/TesteDatabase', header)
    .pipe(tap(res => {      
      console.log(res); 
    }
    ));
  }