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);
解决方案
也许是这样的:
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);
推荐阅读
- parallel-processing - Julia - 文件中具有函数的工作人员的 LoadError(主)
- python - 以下算法的空间复杂度是多少?
- javascript - 在 Electron 渲染器的 localStorage 中存储凭据有什么风险?
- reactjs - How to pass query-params in route's path?
- excel - 提示用户输入文件路径以循环文件夹文件
- python-3.x - 多输入多输出模型返回单值
- excel - 如何连接 2 列并使用 VBA 保持文本样式?
- python - 从 python 脚本中启动 jupyter notebook 进行调试
- angular - 在结构指令中声明变量
- c++ - 写入系统调用 unix 不会从 argv 写入所有文本