Express中的中间件
如何在router(/ test)方法中捕获中间件函数中引发的错误
app.use(function(err, req, res, next) {
throw new Error('test');
next("its failing")
})
app.get('/test',function(req,res,error){
res.send({ message: error.message });
})
回答如下:您可以使用res.locals对象将变量从中间件传递到路由处理程序。如果传递错误对象,则可以在路由处理程序中进行检查。
app.use(function(req, res, next) {
try {
throw new Error('test error');
} catch (err) {
res.locals.Error = err;
}
next();
})
app.get('/test', function(req,res,error){
if (res.locals.Error) {
res.status(500).json({ message: res.locals.Error.message})
} else {
res.send("OK");
}
})
注意:您还可以将错误直接传递给next()函数。如果执行此操作,Express将跳过所有剩余的处理程序。参见Express error handling
例如:
app.use(function(req, res, next) {
try {
throw new Error('test error');
} catch (err) {
next(err);
}
})