Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Tratamento de erros do backend

Eae galera!! No curso de React apresetando pelo Alberto, ele mostrou uma maneira bem bacana para pegar as mensagens de erros que vinha da API pra apresentar nas views. Como fazer esse tipo de tratamento parecido no angular 2? eu tentei algumas maneiras aki mas não deu certo, por exemplo nesse códígo abaixo, estou fazendo uma requisição pra minha API se tudo der certo ele vai devolver um token, gravar nos headers e redirecionar pra home, porém se caso a senha ou usuário estiver incorreto a API vai devolver uma mensagem de erro, como eu pego ela e mostro pro usuário ?

    this.http.post('http://localhost:9000/login', usercreds, {
                headers: headers
            })
            .map((res:any) => res.json())
            .subscribe( data => { 
                this.saveJwt(data.token);
            }, error => console.log('erro'));
    }
4 respostas

Você pega a msg de erro em

error => console.log('erro'));

Mas o servidor fornecido do curso não da mensagem como você espera. É um backend simples. Quem cria o back escolhe o retorno do server.

Olá Flavio, entendi mas o que eu to querendo é saber se tem como pegar o erro da response que vem em JSON, tipo esse

{"timestamp":1481022887152,"status":500,"error":"Internal Server Error","exception":"javax.servlet.ServletException","message":"Usuário ou senha inválido","path":"/login"}

por exemplo como eu acesso a propriedade "message"?

solução!

Oi Christian! Se você recebeu um Response, pode pegar o status e a mensagem através de status e statusText respectivamente. Se não for, precisa tratar. Veja um exemplo:

if (error instanceof Response) {
    const body = error.json() || '';
    const err = body.error || JSON.stringify(body);
    errMsg = `${error.status} - ${error.statusText || ''} ${err}`;
  } else {
    errMsg = error.message ? error.message : error.toString();
  }

Entendi!! Muito obrigado Flávio!!