我有一个使用控制器1的路由A。
#A
router.get("/:id", require("./user_get"));
我想对B路线使用相同的逻辑,但仅服务于不同的html。
#B
router.get("/:id", ????);
我可以将粘贴代码从user_get
复制到新文件。但是我想知道有没有办法扩展它。我可以更改res.render value以某种方式如果我只是在新文件中包含 user_get
。
您想做的就是将userGet
中的任何动作分开为中间件。
const userGet = (req, res, next) => {
// whatever you use to get the user
// if your user getting is async the following lines would of course need to be in your `.then`
res.locals.user = user
next()
)}
注意中间件签名 - 具有req
,res
和next
的功能,res.locals
的使用以及末尾呼叫next
。
然后您要写路由处理程序:
const routeOneHandler = (req, res) => {
res.render('templateForRouteOne', { user: res.locals.user })
}
const routeTwoHandler = (req, res) => {
res.render('templateForRouteTwo', { user: res.locals.user })
}
并这样更新您的路线:
// route one
router.get('/:id', userGet, routeOneHandler)
// route two
router.get('/:id', userGet, routeTwoHandler)
如果middleware
和next
的概念对您来说是新的,我建议查看Express文档,或查看此答案中的信息。