Node.js (Express) 带有路由器的错误处理中间件

2024-04-25

这是我的应用程序结构:

- app.js
- routes
---- index.js

The ExpressJS应用程序创建错误处理程序development and production环境。这是来自的代码片段app.js:

app.use('/', routes); // routing is handled by index.js in the routes folder

//The following middleware are generated when you create the Express App

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
    app.use(function (err, req, res, next) {
        res.status(err.status || 500);
        res.render('error.ejs', {
            message: err.message,
            error: err
        });
    });
}

// production error handler
// no stacktraces leaked to user
app.use(function (err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

以及里面的routes/index.js,我在这里处理所有路由:

var router = express.Router();

router.get('/', function (req, res) {
    someAsyncFunction(function(err, result) {
        if (err) throw err; // Handle this error
    }
});

module.exports = router;

我想要err被传递给错误处理程序之一而不是被抛出。我怎样才能做到这一点?


您必须将其传递给下一个回调,这通常是路由处理程序中的第三个参数

var router = express.Router();

router.get('/', function (req, res, next) {
    someAsyncFunction(function(err, result) {
        if (err) {
            next(err); // Handle this error
        }
    }
});

module.exports = router;

calling next(err)将允许错误被捕获在具有以下签名的链下游的中间件中:

app.use(function (err, req, res, next){
    // do something about the err
});

参考:http://expressjs.com/en/guide/error-handling.html http://expressjs.com/en/guide/error-handling.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js (Express) 带有路由器的错误处理中间件 的相关文章

随机推荐