next()不会跳过其余的中间件

时间:2017-04-27 14:39:57

标签: javascript node.js express

我是整个快速路由逻辑(以及节点和js)的新手。但我有一些问题似乎无法追查,但我想我理解它的背景。那么现在,这没有多大意义,无论如何它仍然存在。

我正试图根据req.query中的数据有条件地跳过中间件,并且它使得预期的表单页面很好,除了我在前面的控制台中得到“无法发送标题两次......”的事实中间件,我以为我跳过了。

从我接下来可以收集的内容()应该立即让我到下一个中​​间件并完全跳过剩下的块(有点像return踢出一个函数)。这不正确吗?

路径:localhost:3000 / JohnnyBoy?action = form

    router.get('/:name/', function(req, res, next) {

      if(req.query.action !== 'view') { next(); };

      console.log('Why am I seeing this in the console?');

      res.render('first', { 
        title: req.params.name 
        });
    });

    router.get('/:name/', function(req, res, next) {

        res.render('form', {  
                  title: req.params.name + ' This is a form page', 
                  formFields: fields.userPostFields()
                  });
    });

1 个答案:

答案 0 :(得分:2)

您需要在致电return;后放置next();只调用next()不会停止执行当前函数。

替换

if(req.query.action !== 'view') { next(); };

if(req.query.action !== 'view') { next(); return;};