检查是否有 next() 函数表达

Sny*_*max 6 javascript next node.js express

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

router.get('/', function(req, res, next){
    if(next){//always returns true
    }
});
Run Code Online (Sandbox Code Playgroud)

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

我想要一个类似于

function findAll(req, res, next){
    db.findAll(function(err, docs){
        if(next){
            req.list = docs
            return next();
        }else{
            res.render('table', {list:docs};
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以在任何一个中使用相同的功能

router.get('/', findAll, handleData);
Run Code Online (Sandbox Code Playgroud)

或者

router.get('/', findAll);
Run Code Online (Sandbox Code Playgroud)

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

例子

var layer = stack[idx++];
Run Code Online (Sandbox Code Playgroud)

如果下一个函数存在,则它会捕获下一个函数,但我无法从我的函数访问此范围。有没有办法我可以自己定义图层。

这似乎对防止冗余代码非常有用

Sny*_*max 3

感谢保罗,我能够解决下一个问题。目前这个工作

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);
}
Run Code Online (Sandbox Code Playgroud)

将与

router.get('/', findAll());
Run Code Online (Sandbox Code Playgroud)

或者

router.get('/', findAll(handleData));
Run Code Online (Sandbox Code Playgroud)