【问题标题】:check if there is a next() function express检查是否有 next() 函数 express
【发布时间】:2015-02-07 10:31:56
【问题描述】:

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

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++];

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

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

【问题讨论】:

  • 按照设计,快递中的中间件不是总是有next() 吗?您还可以通过在闭包上下文中返回实际视图函数的函数来简洁地选择视图属性。
  • 这就是我问它的设计方式,你可以随时调用 next 但是有没有办法找出运行的函数是否是该链中的最后一个
  • @paul 好主意

标签: javascript node.js express next


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    希望对你有帮助。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-31
      • 2015-02-24
      • 1970-01-01
      • 2011-07-26
      • 2015-03-02
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多