所以我尝试做一个全栈项目。它具有诸如注册,登录,配置文件等的控制器。

我要做的是手动要求每个控制器,然后根据要求使用它们。例如,我将有

app.use('/signup',signup);
app.use('/login',login);
app.use('/profile',profile);


但是,当我增加项目的复杂性时,将需要更多的控制器,但是手动键入所有内容并不是最佳实践。

我想要一种更通用的形式,只需一行即可完成所有工作:

app.use('whatever the link i got',load the corresponding controller);


也许解决方案将采用不同的形式。我该如何实现?我需要一些建议。

最佳答案

最简单的解决方案可能是将它们全部放在controllers目录中,然后执行以下操作:

const controllers = readdirSync(path.join(__dirname, 'controllers'))
controllers.forEach(controller => {
  app.use(`/${controller}`, require(`./controllers/${controller}`))
})


只要您的路由和控制器的名称相同,这就很好用。如果您需要处理将烤肉串转换为驼峰式的情况,则总是lodash

假设您使用的是express 4,则可以更进一步,并将index.js放在controllers目录中。内:

const express = require('express')
const router = express.Router()

const controllers = readdirSync(__dirname))
  .filter(f => f !== 'index.js'))
controllers.forEach(controller => {
  router.use(`/${controller}`, require(`./${controller}`))
})

module.exports = router


然后,您可以像这样使用路由器:

app.use('/',require('./ controllers'))

关于javascript - 如何要求多个 Controller 搭配 express ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45023624/

10-13 02:49