【问题标题】:Express Router Middleware acts on unintended routesExpress Router Middleware 作用于非预期路由
【发布时间】:2015-04-24 10:11:20
【问题描述】:

我正在尝试使用 Express Middleware 来验证用户是否有权处理我的某些请求。但是,有些请求不需要任何验证。在路由器中,我有这样的东西:

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

请注意,我列出的最后一条路线没有 isAuthenticated 那里。但是,将该中间件放在上述路由中也使其在最后一个中起作用。我也尝试过这样的事情:

  router.use('/transactions/:timeStamp', TransactionHandler.transactions.findMostRecent);
  router.get('/transactions/:timeStamp', TransactionHandler.transactions.findMostRecent);

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

【问题讨论】:

    标签: node.js express


    【解决方案1】:

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

    【讨论】:

    • 很奇怪,顺序很重要。感谢您的提示。
    猜你喜欢
    • 2021-10-14
    • 2016-12-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2022-01-22
    • 2021-08-07
    • 1970-01-01
    • 2022-01-21
    相关资源
    最近更新 更多