首页 > 解决方案 > 有没有办法将控制器功能普遍应用于快速路由器文件中的所有路由?

问题描述

我在应用程序中有以下代码。假设我希望每个“router.get”实例都使用“authController.isLoggedIn”。有没有一种不需要我输入 6 次的方法?我在想 router.use 可能是它......但是在做了一些研究之后,我认为那不再是正确的了。任何帮助,将不胜感激。谢谢你。

router.get('/tour/:slug', viewsController.getTour);
router.get('/login', authController.isLoggedIn, viewsController.getLoginForm);
router.get('/signup', authController.isLoggedIn, viewsController.getSignupForm);
router.get('/me', authController.protect, viewsController.getAccount);
router.get('/my-tours', authController.protect, viewsController.getMyTours);
router.get('/create', authController.protect, viewsController.createTour);

标签: javascriptexpress

解决方案


也许是这样的:

const authRouter = (path, param, ...controllers) =>
  router.get(path, authController[param], ...controllers);

router.get('/tour/:slug', viewsController.getTour);
authRouter('/login', 'isLoggedIn', viewsController.getLoginForm);
authRouter('/signup', 'isLoggedIn', viewsController.getSignupForm);
authRouter('/me', 'protect', viewsController.getAccount);
authRouter('/my-tours', 'protect', viewsController.getMyTours);
authRouter('/create', 'protect', viewsController.createTour);

推荐阅读