Se si utilizza Express, gli errori vengono generalmente gestiti direttamente nel percorso o all'interno di un'API costruita sopra a mangimi, inoltrando l'errore 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));
...
})
})
Il NotFoundError
potrebbe essere annusò nel vostro error handler middleware per fornire messaggistica personalizzato.
Alcune astrazioni sono possibili ma è comunque necessario accedere al metodo next
per passare l'errore lungo la catena di percorso.
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
})
Per quanto riguarda la gestione centralizzata degli errori Mongoose, theres non proprio un posto per gestire em all. Gli errori possono essere gestiti a vari livelli:
connection
errori vengono emessi sui connection
vostri modelli utilizzano, in modo
mongoose.connect(..);
mongoose.connection.on('error', handler);
// or if using separate connections
var conn = mongoose.createConnection(..);
conn.on('error', handler);
per le query tipiche/aggiornamenti/rimuove l'errore è passato al callback.
PlaneTickets.find({..}, function (err, tickets) {
if (err) ...
Se non si passa una richiamata l'errore viene emesso sul modello se si sta ascoltando per esso:
PlaneTickets.on('error', handler); // note the loss of access to the `next` method from the request!
ticket.save(); // no callback passed
Se non si passa una richiamata e non sta ascoltando errori al livello model
verranno emessi sui modelli connection
.
La chiave da asporto qui è che si desidera accedere a next
in qualche modo per passare l'errore lungo.
Grazie, la tua risposta utile chiarisce molto sulla gestione degli errori per me. – Sonson123
Ottima risposta! Soprattutto il suggerimento sull'utilizzo di next() per collegarsi direttamente al middleware di gestione degli errori di ExpressJS. –
Che non funziona con mongoose.connection.on ('errore', gestore); o conn.on ('errore', gestore); per me, ho definito il gestore come una funzione che console.log() il primo argomento ma non appare nulla sulla console del server. – Vadorequest