Javascript 检查是否有next()函数express

Javascript 检查是否有next()函数express,javascript,node.js,express,next,Javascript,Node.js,Express,Next,是否有办法查看当前中间件之后是否有函数。 即 我有一个获取信息的功能,根据路径,信息将显示在表格或表单中,或者与其他数据组合 我想要一个类似于 function findAll(req, res, next){ db.findAll(function(err, docs){ if(next){ req.list = docs return next(); }else{ res.rend

是否有办法查看当前中间件之后是否有函数。 即

我有一个获取信息的功能,根据路径,信息将显示在表格或表单中,或者与其他数据组合

我想要一个类似于

function findAll(req, res, next){
    db.findAll(function(err, docs){
        if(next){
            req.list = docs
            return next();
        }else{
            res.render('table', {list:docs};
        }
    });
}
这样我就可以在任何一种情况下使用相同的函数

router.get('/', findAll, handleData);

在任何一种情况下,都会发送响应。有没有一种方法可以像express在next()处理程序中那样定义路由器的堆栈

范例

var layer = stack[idx++];
这将捕获下一个函数(如果它存在),但我无法从函数访问此作用域。我有没有办法自己定义图层


这似乎可以非常有效地防止冗余代码

多亏了paul,我才能够解决下一个问题。 目前这项工作正在进行中

function findAll(callback){
    return function send(req, res){
        db.findAll(function(err, docs){
            if(callback){
                req.docs = docs
                return callback(req, res, next());
            }
            res.render('table', {docs:docs});
        });
    }
}
function handleData(req, res, next){
    res.send(req.docs);
}
将与

router.get('/', findAll());

斯尼马克斯 您可以在函数中检查是否定义了next。 如果定义了,您可以调用next和 如果没有,就做你想做的

为我工作

    function findAll(req, res, next){
      db.findAll(function(err, docs){
        if(typeof next != "undefined"){
            req.list = docs
            return next();
        }else{
            res.render('table', {list:docs};
        }
      });
    }
我希望有帮助


感谢您

,express中的中间件不总是有一个
next()
?您还可以通过使用一个函数在闭包上下文中返回实际的视图函数来简洁地选择视图属性。这就是我要问的,它的设计方式您可以随时调用下一个视图属性,但是有没有办法确定运行的函数是否是该闭包上下文中的最后一个chain@paul好主意
router.get('/', findAll());
router.get('/', findAll(handleData));
    function findAll(req, res, next){
      db.findAll(function(err, docs){
        if(typeof next != "undefined"){
            req.list = docs
            return next();
        }else{
            res.render('table', {list:docs};
        }
      });
    }