Подтвердить что ты не робот

Как организовать крупные проекты Node.js

Каковы хорошие способы организации больших проектов Node.js?

Например, приложение, использующее как express.js, так и socket.io? Это будет включать как логическую структуру приложения, так и файловую систему.

В настоящее время я нахожу, что я собираю тонну кода в один главный файл js и помещаю код в гигантский глобальный объект, и он чувствует себя непослушным.

4b9b3361

Ответ 1

Пример для начинающих

Мне нравится первоначально проверенный от @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.

Что бы вы сделали, так это создать папку "контроллеров" в вашем приложении, чтобы ваша структура выглядела так:

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 действительно действует как русская кукла в том, как ее код может быть организовано.

Внутри "/контроллеров" добавьте еще один файл "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 очень приятен для программирования с помощью.

Управляемый экспресс 4 Пример маршрутизации

Вот еще одно сообщение, на которое я ответил, чтобы выразить 4 маршрута, которые относятся к этому.

Отдых с вложенным маршрутизатором Express.js

Ответ 2

Я бы рекомендовал вам подумать о библиотеках. npm - отличный инструмент для захвата библиотек, и ваш код, вероятно, делает это все время. Так почему бы не взглянуть на то, что вы пишете, и подумать: "Какими частями этого я бы предпочел быть require - вместо библиотеки вместо этого?

Затем вы можете сначала найти такую ​​библиотеку, и вы внезапно сократили код, который вам нужно написать. Если вы не можете найти такую ​​библиотеку, вы можете написать свой собственный, а затем решить, хотите ли вы опубликовать ее как библиотеку с открытым исходным кодом или оставить ее закрытой.

Если у вас есть, скажем, довольно сложный объект, который вы хотите использовать в своем коде, но считайте его слишком обычным для конкретного сайта, над которым вы работаете, чтобы квалифицироваться как библиотека, помните, что вы всегда можете var myObj = require('./relative/path/to/javascript/file'); и переместить его в свой отдельный файл для работы, позволяя вам упорядочить свой код аналогично C/С++/Java-коду.

Но опять-таки проблема, решаемая как можно более общим образом, лучше, потому что она стимулирует повторное использование кода и лучшее тестирование вашего кода (особенно если он открывает исходный код, а другие могут его использовать).

Ответ 3

Я написал сообщение блога об этом самом предмете несколько дней назад, и хотя статья написана на французском языке, я создал a GitHub repo (на английском языке), чтобы показать рабочий пример используемой структуры.

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

Ответ 4

Как и в других блогах, я написал один из них об организации приложений Express. Это метод, который я использовал около полутора лет. В принципе, организуйте свои приложения вокруг своих объектов данных или любых других основных элементов. Поместите логику для каждого из этих элементов в свои собственные каталоги. Я пытался много заимствовать у Python.

http://rycole.com/2013/01/28/organizing-nodejs-express.html

Ответ 5

Я понимаю, что этот вопрос довольно старый, однако я нашел серию Eric Satterwhite Node невероятно полезной, когда я впервые начал разрабатывать Node по шкале.

http://www.codedependant.net/2015/01/19/production-ready-node-structure-packaging/

В этой статье вы найдете большой пакет положительных героев и структуру, которая выглядит следующим образом:

# Project 
. 
|-- packages/
|   |-- proejct-core
|   |   |-- lib/
|   |   |-- commands/
|   |   |-- startup/
|   |   |-- conf/
|   |   |-- test/
|   |   |-- package.json
|   |   |-- README.md
|   |   |-- events.js
|   |   |-- .npmignore
|   |   `-- index.js
|-- package.json
`-- index.js

Когда папка packages/ превращается в ваш источник для модульности.