1
resposta

Padronizando erro 404

Fala Professor...

Beleza??

Surgiu uma dúvida.

Consigo definir uma mensagem padrão para quando o usuário digitar uma rota inexistente? Não quero que ele receba um 404 padrão.

Exemplo: http://localhost:3003/api/ http://localhost:3003/ http://localhost:3003/api/qualquercoisa

São rotas inválidas. Tem como dizer que quando acessar uma rota inexistente receberá um json ou algo padronizado?

Aqui ele vai receber um Cannot Get

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Error</title>
    </head>
    <body>
        <pre>Cannot GET /api/</pre>
    </body>
</html>

Queria padronizar dizendo algo do tipo.

{ "message": "This is an invalid route", "tip": "/api/payments" }

Se sim, como eu faria isso?

E ainda... caso eu queira que todas as rotas incorretas caiam nesta mensagem, tem como?

1 resposta

Oi Esequiel, tudo bem? No express, o erro 404 não é um erro em si, por isso a gente não consegue capturar isso. Neste caso, o Express vai tentar executar todos os middlewares disponíveis tentando responder alguma coisa. Caso a rota não seja encontrada, ele executa o último da fila que responda a qualquer coisa. Então para páginas 404 temos que fazer apenas o seguinte:

app.use(function (req, res, next) {
      res.status(404).send("Sorry can't find that!")
})

onde o send, pode ser algo como render, etc. Lembre-se por esse código por último, depois de todas as rotas.