Когда вы вызываете next(err)
в Express, это отправляет обработчику ошибок Express по умолчанию, который не очень хорош.
Но обычно вы предоставляете собственный обработчик ошибок который выглядит следующим образом:
app.use(function (err, req, res, next) {
console.error(err.stack)
// send your own custom error response here
res.status(somethingAppropriate).send("something here");
});
Об этом типе Express обработки ошибок можно прочитать здесь в Express do c. Это определенный тип промежуточного программного обеспечения c с четырьмя аргументами вместо обычных трех и с аргументом err
первым. Кроме того, необходимо go последний в ваших определениях маршрутизаторов и промежуточного программного обеспечения (поэтому он обрабатывается последним).
Вам также не нужно централизовать обработку ошибок. Я нахожу это много раз, я хочу отправить очень точную ошибку c в контекст, в котором произошла ошибка. В этом случае я просто улавливаю ошибку в обработчике маршрута, где она произошла, и отправляю ответ об ошибке прямо отсюда.
Например, вы можете сделать это:
app.get('/',function(req,res,next){
MongoClient.connect(url,function(error,client){
if(error){
res.status(500).send("Database offline - notify system administrator or please try back shortly");
} else {
res.send('Connected successfully!');
}
})
})