Как требовать нескольких контроллеров с экспресс?

1

Поэтому я стараюсь сделать полный проект стека. Он имеет контроллеры, такие как регистрация, вход в систему, профиль и т.д.

Что я делаю, так это каждый контроллер вручную, а затем используйте их в соответствии с запросом. Например, у меня будет

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

Однако, когда я создаю сложность проекта, потребуется больше контроллеров, но набирать вручную все не является лучшей практикой.

Я хочу иметь более общую форму, только одна строка выполняет всю работу:

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

Возможно, решение будет в различной форме. Как я могу это достичь? Мне нужны предложения.

Теги:
express

1 ответ

0
Лучший ответ

Простейшим решением, вероятно, было бы поместить их все в каталог 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'))

  • 0
    Я считаю, что это должно быть f => f.endsWith ('. Js'), а не!. Также, когда я использую этот код, он говорит, что Router.use () требует функции промежуточного программного обеспечения, но получил объект. Нужна помощь
  • 0
    @jianchengwu Извините, скопировал это из проекта, каждый маршрут которого находился в своем собственном каталоге. Я исправил ответ выше; попробуй. Также убедитесь, что в вашем каталоге контроллеров нет ничего, кроме controllers и файла index.js.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню