为什么添加get参数会强制执行中间件

时间:2017-04-12 05:44:55

标签: javascript node.js express middleware

我有一个像这样的中间件

// route middleware to verify a token
app.use(function(req, res, next) {

  console.log(req.baseUrl);

  // check header or url parameters or post parameters for token
  var token = req.body.token || req.query.token || req.headers['x-access-token'];

  // decode token
  if (token) {

    // verifies secret and checks exp
    jwt.verify(token, app.get('superSecret'), function(err, decoded) {
      if (err) {
        return res.json({
          success: false,
          message: 'Failed to authenticate token.'
        });
      } else {
        // if everything is good, save to request for use in other routes
        req.decoded = decoded;
        next();
      }
    });

  } else {

    // if there is no token
    // return an error
    return res.status(403).send({
      success: false,
      message: 'No token provided.'
    });

  }
});

此路线 http://localhost:8080/verifyAccount 未作为No token provided

回复
app.get('/verifyAccount', function (req, res) {
  res.json({ message: 'Welcome to verify account!' });
});

但是以下路线 http://localhost:8080/verifyAccount?id=123 可以:

app.get('/verifyAccount/:id', function (req, res) {
  res.json({ message: 'Welcome to verify account!' });
});

中间件代码位于代码文件的底部,get路径位于上方

背后的概念是什么?

  

为什么添加get参数会强制中间件执行?

刚刚发现,如果我将其称为 http://localhost:8080/verifyAccount/id=123 ,则会正确返回Welcome to verify account!

1 个答案:

答案 0 :(得分:0)

发现问题在于路由被调用的方式。感谢Thomas Theiner的帮助。

查询参数?id=123的请求与/:id不匹配。它应该被称为verifyAccount/123

  

因为,路线?id=123与任何路径都不匹配。因此,最终到达middleware执行

位置确定参数,而不是名称。该名称仅在节点代码中用于引用参数。

对于多个参数,我们会有verifyAccount/:id/:otherParameter之类的多个斜杠,可以使用verifyAccount/123/234调用