我正在建立一个WEB应用程序,后端与Node.js和Express。我已经建立了一个认证中间件,检测用户是否登录与jwt,我希望一些路由使用它(保护)和一些不(公共),但重复它在每个路由似乎太健壮和过时。例如,这是我的routes.js:
import express from "express";
import authenticateUser from "../../Middlewares/auth.js";
import controller from "./controller.js";
const router = express.Router();
router.get("/searchFor/:term", controller.searchFor);
router.get("/myList", authenticateUser, controller.getMyList);
router
.route("/myList/:id")
.get(authenticateUser, controller.isInList)
.post(authenticateUser, controller.addToList)
.delete(authenticateUser, controller.removeFromList);
“searchFor”路由是公共的,所以我不希望auth中间件在那里运行,因此我没有使用router.use(authenticateUser)。
我以为我可以做这样的事
router
.route("/myList/:id", authenticateUser)
.get(controller.isInList)
.post(controller.addToList)
.delete(controller.removeFromList);
这样我就不用每次都重复auth中间件了,但是它不起作用,所以我回到了第一个选项。有没有更好的方法?
1条答案
按热度按时间1qczuiv01#
您可以使用路由器的
.all
方法将中间件应用于所有路由。查看此处的文档:https://expressjs.com/en/4x/api.html#router.route
当你的应用增长并拥有大量路由时,你可以创建某种类型的配置对象,在其中你可以轻松定义新路由并设置它们是否是公共的。然后,让代码遍历整个对象并调用适当的路由器方法来配置你的路由器。
下面是它可能的样子(我还没有检查或测试这个代码,虽然):
使用类似上面的代码,您可以向
routesConfiguration
列表添加新条目。