Node.js Express中的中间件

Node.js Express中的中间件,node.js,Node.js,如何在路由器(/test)方法中捕获中间件函数中抛出的错误 app.use(函数(err,req,res,next){ 抛出新错误(“测试”); 下一步(“它的失败”) }) app.get('/test',函数(req,res,error){ res.send({message:error.message}); }) 您可以使用对象将变量从中间件传递到路由处理程序。如果传递错误对象,可以在路由处理程序中检查此错误 app.use(function(req, res, next) { t

如何在路由器(/test)方法中捕获中间件函数中抛出的错误

app.use(函数(err,req,res,next){
抛出新错误(“测试”);
下一步(“它的失败”)
})
app.get('/test',函数(req,res,error){
res.send({message:error.message});
})

您可以使用对象将变量从中间件传递到路由处理程序。如果传递错误对象,可以在路由处理程序中检查此错误

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将跳过任何剩余的处理程序。看

例如:

app.use(function(req, res, next) {
    try {
        throw new Error('test error');
    } catch (err) {
        next(err);
    }   
})

下面的代码段按预期工作

var a=function test(req,res,next){
    try {
        throw new Error('test error');
    } catch (err) {
        next(err);
    } 
}

app.get('/test',a, function(req,res){
   res.send(200)
}, (err, req, res, next) => {
    res.status(400).send({ error: err.message });
})