Express를 사용하는 경우 오류는 일반적으로 경로에서 직접 처리되거나 몽구스 상단에있는 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
맞춤형 메시징을 제공하기 위해
error handler middleware에 콧방귀를 뀌 수 있습니다.
일부 추상화는 가능하지만 오류를 경로 체인에 전달하려면 여전히 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
})
몽구스 오류를 중앙에서 처리하는 경우에는 em을 처리 할 장소가 하나도 없습니다. 오류가 여러 수준에서 처리 할 수 있습니다 :
connection
오류는 connection
당신의 모델에 방출되는 전형적인 쿼리/업데이트 이처럼
mongoose.connect(..);
mongoose.connection.on('error', handler);
// or if using separate connections
var conn = mongoose.createConnection(..);
conn.on('error', handler);
, 사용/오류가 콜백에 전달됩니다 제거합니다. 당신이 콜백을 전달하지 않으면
PlaneTickets.on('error', handler); // note the loss of access to the `next` method from the request!
ticket.save(); // no callback passed
을하고 듣고되지 않습니다 오류가 모델 에 방출되는 콜백을 전달하지 않으면
PlaneTickets.find({..}, function (err, tickets) {
if (err) ...
경우 당신은 그것을 듣고 model
레벨의 오류는 connection
모델에서 방출됩니다.
여기서 중요한 문제는 next
에 대한 액세스가 필요하므로 오류를 전달하는 것입니다.
감사합니다. 도움이 될 답변은 나를 위해 오류 처리에 대해 많이 설명합니다. – Sonson123
좋은 답변입니다! next()를 사용하여 ExpressJS의 오류 처리 미들웨어에 직접 연결하는 방법에 대한 제안. –
그건 mongoose.connection.on ('error', handler)와 작동하지 않습니다; 또는 conn.on ('오류', 처리기); 나를 위해, 나는 handle.log() 함수가 핸들러를 첫 번째 인수이지만 서버 콘솔에는 아무 것도 나타나지 않는다고 정의했다. – Vadorequest