Модули¶
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 |
|
Запустим приложение: