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

时间:2014-12-09 13:50:41

标签: javascript node.js express next

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

router.get('/', function(req, res, next){
    if(next){//always returns true
    }
});

我有一个功能来获取信息,并根据信息将在表格或表格中显示的路线,或者它将与其他数据结合。

我想要一个类似于

的功能
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);

router.get('/', findAll);

并且在任何一种情况下都会发送回复。有没有办法我可以像下一个()处理程序

中的express那样为路由器定义堆栈

例如

var layer = stack[idx++];

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

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

2 个答案:

答案 0 :(得分: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);
}

将与

一起使用
router.get('/', findAll());

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

答案 1 :(得分:0)

Snymax 您可以检入功能是否定义了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};
        }
      });
    }

我希望这会有所帮助。

谢谢