Node.js Express路由器中间件作用于非预期路由

Node.js Express路由器中间件作用于非预期路由,node.js,express,Node.js,Express,我正在尝试使用Express中间件来验证用户是否被授权处理我的一些请求。但是,有些请求不需要任何验证。在路由器中,我有如下内容: // Routes that end in /transactions module.exports = function(router, isAuthenticated, acl) { router.post('/transactions', isAuthenticated, acl.isAdminOrFrom, TransactionHandler.trans

我正在尝试使用Express中间件来验证用户是否被授权处理我的一些请求。但是,有些请求不需要任何验证。在路由器中,我有如下内容:

// Routes that end in /transactions
module.exports = function(router, isAuthenticated, acl) {
  router.post('/transactions', isAuthenticated, acl.isAdminOrFrom, TransactionHandler.transactions.post);

  // Get most recent transactios by general, category, or userId
  router.get('/transactions/:timeStamp', isAuthenticated, TransactionHandler.transactions.findMostRecent);
  router.get('/transactions/categories/:category/:timeStamp', isAuthenticated, TransactionHandler.transactions.category.findMostRecent);
  router.get('/transactions/users/:user_id/:filter/public/:timeStamp', isAuthenticated, TransactionHandler.transactions.userId.findMostRecent);

  // Get the total reps traded on Repcoin so far
  router.get('/transactions/totaltraded', TransactionHandler.transactions.total.get);
  router.use('/transactions/:timeStamp', TransactionHandler.transactions.findMostRecent);
  router.get('/transactions/:timeStamp', TransactionHandler.transactions.findMostRecent);
请注意,我列出的最后一条路线在那里没有经过身份验证。但是,将中间件放在上述路径中,也使其在最后一个路径中起作用。我也试过这样的方法:

// Routes that end in /transactions
module.exports = function(router, isAuthenticated, acl) {
  router.post('/transactions', isAuthenticated, acl.isAdminOrFrom, TransactionHandler.transactions.post);

  // Get most recent transactios by general, category, or userId
  router.get('/transactions/:timeStamp', isAuthenticated, TransactionHandler.transactions.findMostRecent);
  router.get('/transactions/categories/:category/:timeStamp', isAuthenticated, TransactionHandler.transactions.category.findMostRecent);
  router.get('/transactions/users/:user_id/:filter/public/:timeStamp', isAuthenticated, TransactionHandler.transactions.userId.findMostRecent);

  // Get the total reps traded on Repcoin so far
  router.get('/transactions/totaltraded', TransactionHandler.transactions.total.get);
  router.use('/transactions/:timeStamp', TransactionHandler.transactions.findMostRecent);
  router.get('/transactions/:timeStamp', TransactionHandler.transactions.findMostRecent);

但中间件似乎仍然在调用router.get()的任何对象上执行。如何在每个路由的基础上使用中间件?

我认为这可能是因为
router.post('/transactions',…
router.get之前匹配(“/transactions/totaltraded”,…
。您可以尝试更改顺序,使后一个路由定义在前一个路由定义之前,并查看它是否有任何区别。还可以尝试调试它在给定路由上触发的处理程序。

非常奇怪,顺序确实很重要。感谢您的提示。