Есть ли общее соглашение о разбиении и разбиении app.js
файла на модули в приложении Express.js ? Или принято хранить все в одном файле?
javascript
node.js
modularity
express
Эрик Красный
источник
источник
Ответы:
Я разбил мою следующим образом:
Я использую экспорт, чтобы вернуть то, что имеет значение. Например, в моделях, которые я делаю:
а затем, если мне нужно создать номер телефона, это очень просто:
если мне нужно использовать схему, то
PhoneNumber.schema
(что предполагает, что мы работаем из папки маршрутов и нам нужно подняться на 1 уровень вверх, а затем вниз к моделям)
РЕДАКТИРОВАТЬ 4
В экспресс-вики есть список фреймворков, построенных поверх нее.
Из них я думаю, что матадор Twitter структурирован довольно хорошо. На самом деле мы использовали очень похожий подход к тому, как они загружают части приложения.
derby.js тоже выглядит очень интересно. Это сродни метеору без всякой шумихи и действительно дает кредит там, где он должен быть (в частности, node и express).
РЕДАКТИРОВАТЬ 3
Если вы поклонник CoffeeScript (а я нет) и действительно хотите L&F от Rails, есть еще Tower.js .
РЕДАКТИРОВАТЬ 2
Если вы знакомы с Rails и не возражаете против перетекания некоторых концепций, то есть Locomotive . Это легкий фреймворк, построенный на Express. Он имеет очень похожую структуру, что и RoR, и переносит некоторые из более элементарных концепций (например, маршрутизацию).
Стоит проверить, даже если вы не планируете его использовать.
ИЗМЕНИТЬ 1
nodejs-express-mongoose-demo очень похож на мою структуру. Проверить это.
источник
Предупреждение: ссылка на код, который я собрал вместе для нокаута узла, вроде работает, но далеко не элегантен или отполирован.
Чтобы быть более конкретным о разделении, у
app.js
меня есть следующий файл app.jsПо сути, это означает, что я помещаю всю загрузку в отдельный файл, а затем загружаю сервер.
Так что же делает бутстрап ?
Он разбивает все настройки инициализации сервера на красивые куски. В частности
app.configure
)Например, давайте посмотрим на файл маршрутизации
Здесь я загружаю все свои модели и маршруты в виде массивов файлов.
Отказ от ответственности:
readdirSync
это нормально, только если вызывается перед запуском http-сервера (раньше.listen
). Вызов синхронных вызовов блокировки во время запуска сервера просто делает код более читабельным (в основном это взлом)Здесь я нажимаю socket.io, чтобы фактически использовать авторизацию, а не позволять любому тому и джеку разговаривать с моим сервером socket.io
Здесь я начинаю свои маршруты с передачи соответствующей модели в каждый объект маршрута, возвращаемый из файла маршрута.
По сути, суть состоит в том, чтобы вы организовали все в красивые маленькие модули, а затем получили какой-то механизм начальной загрузки.
В другом моем проекте (в моем блоге) есть файл инициализации с аналогичной структурой .
Отказ от ответственности: блог сломан и не строится, я над этим работаю.
источник
Для обслуживаемой организации маршрутизации вы можете проверить эту статью о в экспресс-routescan узлового модуля и попробовать его. Для меня это лучшее решение.
источник
Мои приложения создаются на основе инструмента экспресс-генератора. Вы можете установить его, запустив
npm install express-generator -g
и запустить с помощьюexpress <APP_NAME>
.Чтобы дать вам представление, структура одного из моих небольших приложений выглядела так:
Одна крутая вещь, которая мне нравится в этой структуре, которую я в конечном итоге использую для любого разрабатываемого мной экспресс-приложения, - это способ организации маршрутов. Мне не нравилось запрашивать каждый файл маршрута в app.js и
app.use()
каждый маршрут, особенно когда файл становится больше. Таким образом, я нашел полезным сгруппировать и централизовать все моиapp.use()
файлы в файле ./routes/index.js.В итоге мой app.js будет выглядеть примерно так:
и мой ./routes/index.js будет выглядеть примерно так:
Я могу это сделать просто
require(./users)
потому, что написал пользовательский маршрут с помощью express.Router (), который позволяет мне «группировать» несколько маршрутов, а затем экспортировать их сразу, с целью сделать приложение более модульным.Это пример того, что вам подходит на моем маршруте ./routers/users.js:
Надеюсь, это помогло ответить на ваш вопрос! Удачи!
источник