Модули¶
Node.js использует модульную систему. То есть вся встроенная функциональность разбита на отдельные пакеты или модули. Модуль представляет блок кода, который может использоваться повторно в других модулях.
При необходимости мы можем подключать нужные нам модули. Какие встроенные модули есть в node.js и какую функциональность они предоставляют, можно узнать из документации.
Для загрузки модулей применяется функция require(), в которую передается название модуля. К примеру, в первом приложении из предыдущей темы для получения и обработки запроса был необходим модуль http:
1 |  | 
После получения модуля мы сможем использовать весь определенный в нем функционал, который опять же можно посмотреть в документации.
Подобным образом мы можем загружать и использовать другие встроенные модули. Например, используем модуль os, который предоставляет информацию об окружении и операционной системе:
1 2 3 4 5  |  | 
Мы не ограничены встроенными модулями и при необходимости можем создать свои. Так, в прошлой теме проект состоял из файла app.js, в котором создавался сервер, обрабатывающий запросы. Добавим в тот же каталог новый файл greeting.js и определим в нем следующий код:
1 |  | 
В файле app.js подключим наш модуль:
1 |  | 
В отличие от встроенных модулей для подключения своих модулей надо передать в функцию require относительный путь с именем файла (расширение файла необязательно):
1 |  | 
Запустим приложение:
На консоль выводится та строка, которая определена в файле greeting.js.
Теперь изменим файл greeting.js:
1 2 3 4 5 6 7 8 9  |  | 
Здесь определена переменная currentDate. Однако из вне она недоступна. Она доступна только в пределах данного модуля. Чтобы какие переменные или функции модуля были доступны, необходимо определить их в объекте module.exports. Объект module.exports - это то, что возвращает функция require() при получении модуля.
Вообще объект module представляет ссылку на текущий модуль, а его свойство exports определяет все свойства и методы модуля, которые могут быть экспортированы и использованы в других модулях. Подробнее определение загрузки модуля и все его функции можно посмотреть на странице https://github.com/nodejs/node/blob/master/lib/module.js.
В частности, здесь определяется свойство date и метод getMessage, который принимает некоторый параметр.
Далее изменим файл app.js:
1 2 3 4 5 6 7 8  |  | 
Все экспортированные методы и свойства модуля доступны по имени: greeting.date и greeting.getMessage().
Перезапустим приложение:
Определение конструкторов и объектов в модуле¶
Кроме определения простейших функций или свойств в модуле могут определяться сложные объекты или функции конструкторов, которые затем используются для создания объектов. Так, добавим в папку проекта новый файл user.js:
1 2 3 4 5 6 7 8 9 10 11 12 13 14  |  | 
Здесь определена стандартная функция конструктора User, которая принимает два параметра. При этом весь модуль теперь указывает на эту функцию конструктора:
1 |  | 
Подключим и используем этот модуль в файле app.js:
1 2 3 4  |  | 
Запустим приложение:


