ExpressJS - Tratamento de Erros

O tratamento de erros no Express é feito usando middleware. Mas esse middleware tem propriedades especiais. O middleware de tratamento de erros é definido da mesma maneira que outras funções de middleware, exceto que as funções de tratamento de errosMUST have four arguments em vez de três - err, req, res, next. Por exemplo, para enviar uma resposta sobre qualquer erro, podemos usar -

app.use(function(err, req, res, next) {
   console.error(err.stack);
   res.status(500).send('Something broke!');
});

Até agora estávamos lidando com erros nas próprias rotas. O middleware de tratamento de erros nos permite separar nossa lógica de erro e enviar respostas de acordo. O método next () que discutimos no middleware nos leva ao próximomiddleware/route handler.

Para tratamento de erros, temos o next(err)função. Uma chamada para essa função ignora todo o middleware e nos corresponde ao próximo manipulador de erros para essa rota. Vamos entender isso por meio de um exemplo.

var express = require('express');
var app = express();

app.get('/', function(req, res){
   //Create an error and pass it to the next function
   var err = new Error("Something went wrong");
   next(err);
});

/*
 * other route handlers and middleware here
 * ....
 */

//An error handling middleware
app.use(function(err, req, res, next) {
   res.status(500);
   res.send("Oops, something went wrong.")
});

app.listen(3000);

Este middleware de tratamento de erros pode ser colocado estrategicamente após as rotas ou conter condições para detectar tipos de erros e responder aos clientes de acordo. O programa acima exibirá a seguinte saída.