Si está utilizando Express, los errores se manejan normalmente ya sea directamente en su ruta o dentro de una API construida sobre mangosta, reenviando el error a next
.
app.get('/tickets', function (req, res, next) {
PlaneTickets.find({}, function (err, tickets) {
if (err) return next(err);
// or if no tickets are found maybe
if (0 === tickets.length) return next(new NotFoundError));
...
})
})
El NotFoundError
podrían ser inhalados en su error handler middleware a proporcionar servicios de mensajería personalizado.
Se puede abstraer un poco, pero igual deberá acceder al método next
para pasar el error por la cadena de rutas.
PlaneTickets.search(term, next, function (tickets) {
// i don't like this b/c it hides whats going on and changes the (err, result) callback convention of node
})
En cuanto a la gestión centralizada de los errores de mangostas, en realidad no hay un solo lugar para manejarlos. Los errores pueden ser manejados en varios niveles diferentes:
connection
errores se emiten en los connection
sus modelos están utilizando, por lo
mongoose.connect(..);
mongoose.connection.on('error', handler);
// or if using separate connections
var conn = mongoose.createConnection(..);
conn.on('error', handler);
Para consultas/actualizaciones típicas/elimina el error se pasa a su devolución de llamada.
PlaneTickets.find({..}, function (err, tickets) {
if (err) ...
Si usted no pasa una devolución de llamada el error se emite en el Modelo si está escuchando para ello:
PlaneTickets.on('error', handler); // note the loss of access to the `next` method from the request!
ticket.save(); // no callback passed
Si usted no pasa una devolución de llamada y no está escuchando errores en el nivel model
se emitirán en los modelos connection
.
La clave para llevar aquí es que desea tener acceso a next
de alguna manera para transmitir el error.
Gracias, su respuesta útil aclara mucho sobre el manejo de errores para mí. – Sonson123
¡Gran respuesta! Especialmente la sugerencia sobre el uso de next() para vincular directamente al middleware de manejo de errores de ExpressJS. –
Eso no funciona con mongoose.connection.on ('error', controlador); o conn.on ('error', manejador); para mí, definí handler como una función que console.log() el primer arg pero nada aparece en la consola del servidor. – Vadorequest