我有一個路由/users
作爲我的路由器中的父後綴,所有後續的路由將附加父母,例如。 /users/details
有選擇地應用中間件的快遞
在我app.js
app.use('/api/v1/users', userRoutes);
在我userRoutes
import express from 'express';
import users from '../controllers/user_controller';
import { authenticateRoute, authenticateSignedRoute, aclAuthenticator } from './../middlewares/AuthenticationMiddleware';
const router = express.Router();
//user routes
router.get('/details', authenticateRoute, aclAuthenticator, users.getDetails);
router.get('/posts', authenticateRoute, aclAuthenticator, users.getPosts);
module.exports = router;
什麼,我想這樣做
有沒有辦法爲我添加authenticateRoute和aclAuthenticator中間件添加到父前綴路由,然後對於一個特定的路由,只有第三個中間件被應用,而不是前兩個。
對於例如 app.use('/ API/V1 /用戶,authenticateRoute,aclAuthenticator,userRoutes);
我的新的路由器文件
router.get('/details', applyOnlyThisMiddleWare, users.getDetails);
router.get('/posts', No MiddleWareAtAll, users.getPosts);
基本上,我想在此改變最初的中間件,這可能嗎?
不會讓代碼變得非常混亂,基於路由的檢查會造成混亂。也必須通過正則表達式來完成。如果我有一個路徑'/ user/1',這將保持正確的變化。 –
@NitishPhanse - 對於你所描述的,它將成爲兩條路線中的一行代碼(參見添加到我的答案中的代碼行)。路線定義被認爲是包容性的,而不是排他性的,所以我不知道你會怎麼做。一個更簡潔的方法是修復你的URL設計,以免你首先創建這種情況,以便中間件3更容易與中間件1和中間件2分離(就像在一個單獨的路由器上一樣)。 – jfriend00
完全同意你的觀點。我只是想知道是否異常列表增長說,10個網址,然後我將不得不處理一個數組。你提出什麼網址結構可以解決這個問題? –