【发布时间】:2020-02-20 20:36:14
【问题描述】:
我正在使用 NodeJS/Express/Mongoose 构建一个应用程序,我正在尝试设置一个暂停用户路由,但我正在努力解决如何定义路由以避免任何重复。
我目前有这些用于创建新用户配置文件并随后编辑该配置文件的路线,它们都引用了用户模型。
router.get("/users/:id", isLoggedIn, asyncErrorHandler(getUserProfile));
router.put("/users/:id", isLoggedIn,(updateUserProfile));
个人资料所有者是唯一可以编辑/更新其个人资料的用户,他们必须输入密码才能这样做。一切正常。
但是,我现在正在创建一个单独的“暂停用户”路由,该路由将由单独的管理员/版主更新。新路线可以正常显示表单:
router.get("/users/:id/suspend", isLoggedIn, asyncErrorHandler(getSuspendUser));
但是说到put路由,也是引用同一个用户模型来更新,那么如何避免重复上面的put路由(根据我的理解是不允许的)?
router.put("/users/:id", isLoggedIn, asyncErrorHandler(putSuspendUser));
提前致谢。
【问题讨论】:
-
你在做什么应该没问题。如果您想要不同的行为,您可以为不同的
VERBS使用相同名称的路由。正如您可以使用router.all()来表示所有不同的VERBS,如果您想要相同的行为。 -
嗨@silencedogood,谢谢,虽然我不觉得是这样;当我提交挂起路由的表单时,它会转移到 updateUserProfile 路由,因为它还使用路径 router.put("/users/:id"。我在这里遗漏了什么?谢谢
-
好吧,除非我遗漏了什么,否则您定义路线的方式似乎违反直觉。为什么不用
("/users/suspend/:id")而不是("/users/:id/suspend")?? -
我认为这可能是我对正确使用约定的理解不足;我真的是基于我目前设置的路线。我在下面采用了 Victor 的方法,但也感谢您的意见