Какие хорошие способы организовать большие проекты на Node.js?
Например, приложение, использующее и express.js, и socket.io? Это будет включать как логическую структуру приложения, так и файловую систему.
В настоящее время я обнаруживаю, что засовываю тонны кода в один мастер-файл js и помещаю код в гигантский глобальный объект, и это кажется непослушным.
Ответы:
Пример для начинающих
Мне нравится исходная проверка от @ david-ellis, и вам следует изучить ее подробно, чтобы понять, как она хороша. Однако мне бы хотелось, чтобы он был более упрощенным для новичков, желающих увидеть простой пример. Вот что мне бы хотелось, чтобы кто-нибудь показал мне.
Приведем типичный сценарий, в котором вы используете экспресс и у вас есть много маршрутов, перечисленных в вашем файле app.js. Его содержимое будет выглядеть примерно так:
app.js
// ... startup code omitted above app.get('/', function(req, res) { res.render('index', { title : 'home' }); }); app.get('/contactus', function(req, res) { res.render('contactus', { title : 'contact us' }); }); app.get('/anotherpage', function(req, res) { res.render('anotherpage', { title : 'another page' }); }); // and so on...
Вы можете себе представить, если у вас есть 50 маршрутов, этот файл может выйти из-под контроля. Было бы неплохо убрать часть этого беспорядка из файла app.js.
Что бы вы сделали, так это создать папку «контроллеры» в своем приложении, чтобы ваша структура теперь выглядела так:
Создайте файл в "/ controllers" с именем "index.js" и вставьте следующий код.
/controllers/index.js
module.exports.set = function(app) { // copy your routes listed in your app.js directly into here }
Вырежьте и вставьте списки маршрутов из файла «app.js» и поместите их в файл «/controllers/index.js».
В файле app.js удалите маршруты и вместо них выполните следующие действия.
app.js
// remove your routes and replace with this code var controllers = require('./controllers'); controllers.set(app);
Теперь, если вы хотите, чтобы ваш файл "/controllers/index.js" также был разделен, давайте добавим еще один пример, чтобы вы могли увидеть, как Node.js действительно действует как русская кукла в том, как можно организовать его код.
В «/ controllers» добавьте еще один файл «accounts.js» и поместите в него следующее.
/controllers/account.js
module.exports.set = function(app) { // put more app route listings here }
Теперь в файле "/controllers/index.js" укажите ссылку на "account.js".
/controllers/index.js
var account = require('./account.js'); module.exports.set = function(app) { // your routes here // let "account.js" set other routes account.set(app); }
Как вы понимаете, вы можете продолжать разбивать вещи на все меньшие и меньшие части и помещать больше папок в папки и ссылаться на «require», если хотите. Вы можете использовать ту же концепцию для "/ lib" или файлов библиотеки. "node_modules" уже делает это.
Это лишь одна из многих причин, по которым node.js очень приятно программировать.
Пример маршрутизации Manageable Express 4
Вот еще один пост, на который я ответил, о маршрутах Express 4, связанных с этим.
Отдых с вложенным роутером Express.js
источник
<link>
к чему-то вроде/example/path
того, что пользователь вводит/example/path/
в адресную строку (или наоборот).Несколько дней назад я написал сообщение в блоге на эту тему , и, хотя статья на французском языке, я создал репозиторий GitHub (на английском языке), чтобы показать рабочий пример структуры, которую я использую.
Очевидно, что на этот вопрос нет однозначного ответа, но интересно посмотреть, что делают другие, и я все слышу другие мнения по этому вопросу (который также обсуждался здесь , где вы можете увидеть краткое изложение того, что я предлагаю) .
источник
Как и в другом сообщении в блоге, я написал его специально об организации
Express
приложений. Это метод, которым я пользуюсь около полутора лет. По сути, организуйте свои приложения вокруг объектов данных или любых других основных элементов. Разместите логику для каждого из этих элементов в их собственных каталогах. Я старался многое позаимствовать у Python.http://rycole.com/2013/01/28/organizing-nodejs-express.html
источник
Его статьи больше не находятся в сети, но серия узлов Эрика Саттервайта рекомендовала структуру, указанную ниже.
# Project . |-- packages/ | |-- project-core | | |-- lib/ | | |-- commands/ | | |-- startup/ | | |-- conf/ | | |-- test/ | | |-- package.json | | |-- README.md | | |-- events.js | | |-- .npmignore | | `-- index.js |-- package.json `-- index.js
С
packages/
папкой, превращающейся в ваш источник для модульности.источник
Если вы новичок в этой области, предлагаю вам взглянуть на существующие проекты, которые нравятся разработчикам. Некоторые из них:
Sails.js - 18к звезд. Вы можете посмотреть, как они организовали структуру приложения, по предоставленной мной ссылке. На отличном веб-сайте есть объяснение каждой папки в структуре.
Генератор Express.js - 800 звезд. Есть отличный и простой шаблон для начала работы с Express.js. Здесь вы можете заметить, как они разделяют маршруты из приложения.
Между прочим, многие разработчики уже занимались вашим делом, и вы можете просто разветвить его и обновить.
Киоска . Посмотрите, как они разделяют события в разные файлы в
events/
папке.Ballons.io 2.3k звезд. К сожалению, у них есть весь сервер сокетов в одном файле, но вы можете изучить всю структуру приложения с помощью node.js и socket.io.
источник
Если вы не против, вы всегда можете изучить машинописный текст и перейти на https://nestjs.com/
Если вы хотите придерживаться JS, я настоятельно рекомендую использовать луковичную архитектуру. Лучше всего хранить отдельные бизнес-логику, контроллеры и даже библиотеки (они должны быть заключены в некоторые классы / помощники) - на всякий случай, если вам придется перейти на другую библиотеку (другой парсер CSV и т. Д.).
С луковой архитектурой вам все равно, откуда приходят запросы, не будет много изменений, чтобы добавить даже какой-то брокер сообщений.
Также попробуйте этот https://en.wikipedia.org/wiki/Domain-driven_design
ESLint может помочь с правильной организацией проекта.
источник