您可以在nodejs/express中扩展控制器吗?



我有一个使用控制器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()
)}

注意中间件签名 - 具有reqresnext的功能,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)

如果middlewarenext的概念对您来说是新的,我建议查看Express文档,或查看此答案中的信息。

最新更新