我使用控制器1的路线A.
#A
router.get("/:id", require("./user_get"));
我想对路线B使用相同的逻辑,但只提供不同的html。
#B
router.get("/:id", ????);
我可以将代码从user_get
复制到新文件中。但我想知道有没有办法扩展它。如果我只是在新文件中包含user_get
,我可以以某种方式更改res.render值。
答案 0 :(得分:0)
您要做的是将您在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 documentation,或查看this answer中的信息。