gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:10 24 4
gpt4 key购买 nike

这是我的应用程序结构:

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

ExpressJS 应用程序为开发生产 环境创建错误处理程序。以下是来自 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;

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

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

引用:http://expressjs.com/en/guide/error-handling.html

关于javascript - 带有路由器的 Node.js (Express) 错误处理中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43356705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com