你能在Nodejs / Express中扩展控制器吗?

时间:2018-03-30 13:04:07

标签: node.js express

我使用控制器1的路线A.

#A
router.get("/:id", require("./user_get"));

我想对路线B使用相同的逻辑,但只提供不同的html。

#B
router.get("/:id", ????);

我可以将代码从user_get复制到新文件中。但我想知道有没有办法扩展它。如果我只是在新文件中包含user_get,我可以以某种方式更改res.render值。

1 个答案:

答案 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()
)}

注意中间件签名 - 包含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 documentation,或查看this answer中的信息。