Поэтому я стараюсь сделать полный проект стека. Он имеет контроллеры, такие как регистрация, вход в систему, профиль и т.д.
Что я делаю, так это каждый контроллер вручную, а затем используйте их в соответствии с запросом. Например, у меня будет
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
в каталог контроллеров. Внутри:
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'))