Express を使用している場合、エラーは通常、ルート内で直接処理されるか、mongoose の上に構築された API 内で処理され、エラーが に転送され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));
...
})
})
カスタマイズされたメッセージを提供するために、エラー ハンドラー ミドルウェアNotFoundError
で盗聴される可能性があります。
ある程度の抽象化は可能ですがnext
、エラーをルート チェーンに渡すには、メソッドにアクセスする必要があります。
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
})
マングースのエラーを一元的に処理することに関して言えば、すべてを処理する場所は実際には 1 か所ではありません。エラーは、いくつかの異なるレベルで処理できます。
connection
connection
モデルが使用している上でエラーが発生するため、
mongoose.connect(..);
mongoose.connection.on('error', handler);
// or if using separate connections
var conn = mongoose.createConnection(..);
conn.on('error', handler);
典型的なクエリ/更新/削除の場合、エラーはコールバックに渡されます。
PlaneTickets.find({..}, function (err, tickets) {
if (err) ...
コールバックを渡さない場合、モデルをリッスンしている場合、モデルでエラーが発生します。
PlaneTickets.on('error', handler); // note the loss of access to the `next` method from the request!
ticket.save(); // no callback passed
model
コールバックを渡さず、レベルでエラーをリッスンしていない場合、エラーはモデルで発行されますconnection
。
ここで重要なことは、next
何らかの方法でアクセスしてエラーを渡すことです。