Есть ли способ универсального применения функции контроллера ко всем маршрутам в файле маршрутизатора в express?

#javascript #express

#javascript #экспресс

Вопрос:

У меня есть приведенный ниже код в приложении. Допустим, я хотел, чтобы каждый экземпляр «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);
  

Ответ №1:

Может быть, что-то вроде этого:

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