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

问题描述 投票:5回答:2

有什么方法可以查看当前中间件.即之后是否有一个函数。

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在next()处理程序中那样定义路由器的堆栈?

例子

var layer = stack[idx++];

如果有下一个函数存在的话,这个函数就会抓取,但是我不能从我的函数中访问这个作用域,有什么方法可以让我自己定义这些层。

这似乎是非常有用的,可以防止多余的代码。

javascript node.js express next
2个回答
3
投票

感谢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());

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

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};
        }
      });
    }

希望对你有帮助。

谢谢你的帮助

© www.soinside.com 2019 - 2024. All rights reserved.