Это краткая запись в блоге о способе структурирования проекта Node.JS в модульной и объектно-ориентированной манере, в частности такой, которая легко читается.
Сначала мы создаем точку входа (помещенную в index.js в корне проекта):
// Entry Point ;!function(undefined) { require(‘./lib/app.js’)(); }();
Затем мы создаем новый модуль Node.JS, представляющий основное создаваемое приложение («./lib/app.js»):
// Application Object ;!function(undefined) { var app = function(){}; var init = function(){ app.moduleOne = require('./lib/modules/module-one.js')(app); app.moduleTwo = require('./lib/modules/module-two.js')(app); app.moduleThree = require('./lib/modules/module-three.js')(app); app.moduleTwo.startHello(); return app; } module.exports = init; }
Наконец, мы продолжаем и создаем один из модулей для нашего приложения («./lib/modules/module-one.js»):
// Module One ;!function(undefined) { var mod = function(){}; var init = function(app){ mod.app = app; return mod; } mod.helloWorld = function(){ console.log("This is module one. Hello world!"); return mod; } module.exports = init; }
И следуйте той же схеме для всех остальных модулей в нашем приложении. Или в приведенном ниже примере «./lib/modules/module-two.js»…
// Module Two ;!function(undefined) { var mod = function(){}; var init = function(app){ mod.app = app; return mod; } mod.startHello = function(){ mod.app.moduleOne.helloWorld(); return; } module.exports = init; }
Здесь интересно то, что у нас есть объект приложения, который содержит глобальное состояние, затем у нас есть отдельные модули, которые определяют дальнейшую функциональность в пределах ограниченной области. Затем мы передаем глобальный объект приложения в отдельные модули при их инициализации, и ссылка на этот объект сохраняется и становится доступной из каждого модуля.
Другая вещь, которая демонстрируется здесь, — это выполнение функций, содержащихся в модуле, другим модулем — с использованием объекта приложения в качестве средства доступа к нему.
Теперь эти модули могут быть даже новыми модулями Node.JS, которые вы загружаете в NPM — ничто вас не останавливает!
Я обнаружил, что мне нравится этот шаблон, он очень чистый и легко читаемый. Я надеюсь, что это поможет вам.