我尝试使用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()的任何东西上执行。如何在每个路由的基础上使用我的中间件?
答案 0 :(得分:1)
我认为这可能是因为router.post('/transactions', ...
在router.get('/transactions/totaltraded', ...
之前匹配。您可以尝试更改排序,以便后一个路由定义在前者之前,看看它是否有任何区别。还尝试调试它在给定路由上触发的处理程序。