我正在nodejs和express中构建一个应用程序。任何人都可以帮助我理解以下代码之间的区别:
var app = express();
app.use(function(err, req, res, next){
console.error(err);
res.render('home.ejs', {message:'Something broke!'});
});
和
var domain = require('domain');
var d = domain.create();
d.on('error', function(err) {
console.error(err);
res.render('home.ejs', {message:'Something broke!'});
});
这两段代码是替代的吗?如果是,哪一个更可靠,以避免应用程序崩溃生产?
答案 0 :(得分:2)
Express将每个function (req, res, next) {}
包装在try / catch中。它捕获了许多错误,但没有捕获异步错误。域捕获异步错误。然而,捕获错误并处理它是两回事。
如果你接下来的错误(又名d.on('error', next);
),它最终会表达错误中间件,就像你的第一个例子一样。
因此,不要考虑表达vs域,而是考虑try / catch vs domains。在任何一种情况下都应使用Express来处理错误。
答案 1 :(得分:0)
我设法使用此中间件处理域的异步错误处理:
function(req,res,next){
var d = domain.create();
d.on('error',next)
d.run(function(){
next();
})
}
我目前正在我的服务器上测试它,但看起来对我很好:)。我还创建了npm模块。你可以看看它:
npmjs.org - express-async-error
希望这会有所帮助。 :)