Express'i kullanıyorsanız, hatalar genellikle doğrudan rotanızda veya mongoose'un üzerine yerleştirilmiş bir api dahilinde işlenir ve hatayı next
adresine iletilir.
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));
...
})
})
NotFoundError
özelleştirilmiş mesajlaşma sağlamak için
error handler middleware yılında kokladı edilebilir.
Bazı soyutlama mümkündür, ancak hatayı rota zincirinden aşağı doğru aktarabilmek için next
yöntemine erişmeniz gerekir.
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
})
Merkezi mongoose hatalarıyla ilgili olarak, bunların hepsini işlemek için gerçekten tek bir yer değil. Hatalar birkaç farklı düzeylerde ele alınabilir:
connection
hataları connection
sizin modellerde yayılır tipik sorgular/güncellemeleri için böylece
mongoose.connect(..);
mongoose.connection.on('error', handler);
// or if using separate connections
var conn = mongoose.createConnection(..);
conn.on('error', handler);
, kullandığınız/hata geri arama geçirilir kaldırır. Bir geri arama geçemezseniz
PlaneTickets.on('error', handler); // note the loss of access to the `next` method from the request!
ticket.save(); // no callback passed
ve dinleme değildir: Hata Modeli tarafından çıkan geri arama geçemezseniz
PlaneTickets.find({..}, function (err, tickets) {
if (err) ...
eğer bunun için dinlerken model
seviyesindeki hatalar, connection
modellerinde yayınlanacaklardır.
Buradaki önemli işlem, hatayı bir şekilde iletmek için bir şekilde next
erişimini kullanmaktır.
Teşekkürler, yardımcı yanıtınız benim için hata işleme konusunda çok şey açıklıyor. – Sonson123
Harika cevap! Özellikle, ExpressJS'in hata işleme ara katmanına doğrudan bağlamak için next() kullanımıyla ilgili öneri. –
Bu, mongoose.connection.on ('error', handler) ile çalışmaz; veya conn.on ('error', handler); Benim için, işleyiciyi, konsol.log() öğesinin ilk argümanı olan ancak sunucu konsolunda hiçbir şey görünmeyen bir işlev olarak tanımladım. – Vadorequest