Javascript 如何使用express要求多个控制器?
所以我试着做一个完整的堆栈项目。它有注册、登录、配置文件等控制器 我所做的是手动要求每个控制器,然后根据请求使用它们。例如,我将Javascript 如何使用express要求多个控制器?,javascript,node.js,express,Javascript,Node.js,Express,所以我试着做一个完整的堆栈项目。它有注册、登录、配置文件等控制器 我所做的是手动要求每个控制器,然后根据请求使用它们。例如,我将 app.use('/signup',signup); app.use('/login',login); app.use('/profile',profile); 然而,当我构建项目的复杂性时,将需要更多的控制器,但是手动键入所有内容并不是最佳做法 我想有一个更一般的形式,只有一行完成所有工作: app.use('whatever the link i got',lo
app.use('/signup',signup);
app.use('/login',login);
app.use('/profile',profile);
然而,当我构建项目的复杂性时,将需要更多的控制器,但是手动键入所有内容并不是最佳做法
我想有一个更一般的形式,只有一行完成所有工作:
app.use('whatever the link i got',load the corresponding controller);
也许解决方案会有不同的形式。我怎样才能做到这一点?我需要一些建议。最简单的解决方案可能是将它们全部放在
控制器
目录中,然后执行以下操作:
const controllers = readdirSync(path.join(__dirname, 'controllers'))
controllers.forEach(controller => {
app.use(`/${controller}`, require(`./controllers/${controller}`))
})
只要路由和控制器的名称相同,这种方法就非常有效。如果你需要处理如何将烤肉串转化为骆驼肉盒的问题,总有一些方法
假设您使用的是express 4,您可以更进一步,在controllers目录中放置一个index.js
。内部:
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'))
我认为应该是f=>f.endsWith('.js'),而不是!,另外,当我使用这段代码时,它说Router.use()需要中间件函数,但得到了一个对象。需要help@jianchengwu抱歉,从一个项目中复制了它,该项目的每个路由都位于它自己的目录中。我修正了上面的答案;试试看。另外,确保控制器目录中除了控制器和index.js文件之外没有其他内容。