Node JS: модульная система узлов
Глобальный объект
Глобальные объекты Node.js носят глобальный характер и доступны во всех модулях. Нам не нужно включать эти объекты в наше приложение, мы можем использовать их напрямую.
Модуль
Модуль в Node.js — это простая или сложная функциональность, организованная в один или несколько файлов JavaScript, которые можно повторно использовать в приложении Node.js.
Каждый модуль в Node.js имеет свой собственный контекст, поэтому он не может мешать другим модулям или загрязнять глобальную область видимости. Также каждый модуль можно разместить в отдельном файле .js в отдельной папке.
Создание модуля
Первое, что вы делаете, чтобы получить доступ к функциям модуля, — это экспортируете их. Это делается с помощью оператора export.
Загрузка модуля
Запустите app.js, чтобы увидеть результат.
Функция оболочки модуля
В Node.js каждый файл имеет оболочку для каждого файла, который он выполняет с помощью функции, и, таким образом, console.log(arguments) печатает 5 аргументов, которые узел передает этой функции упаковки.
Интересно, что вы могли использовать некоторые из них здесь и там, но, как и я, вы только сейчас поняли, почему это происходит.
· модуль и экспорт могут быть использованы для изменения самого текущего модуля. Модуль имеет объект с именем exports, который имеет значение по умолчанию {}
· require используется для импорта других модулей в ваш файл/приложение
· __filename и __dirname — это путь к текущему файлу и текущему рабочему каталогу
Модуль пути
Модуль path предоставляет утилиты для работы с путями к файлам и каталогам. Доступ к нему можно получить с помощью:
const path = require('path');
Модули ОС
Модуль os
предоставляет служебные методы и свойства, связанные с операционной системой. Доступ к нему можно получить с помощью:
const os = require('os');
пример os.module
Модуль файловой системы
Модуль fs
позволяет взаимодействовать с файловой системой по образцу стандартных функций POSIX.
Чтобы использовать API на основе обещаний:
import * as fs from 'fs/promises';
Чтобы использовать API обратного вызова и синхронизации:
import * as fs from 'fs';
Все операции файловой системы имеют синхронные формы, формы обратного вызова и обещания и доступны с использованием как синтаксиса CommonJS, так и модулей ES6 (ESM).
Пример обещания #
Операции на основе обещаний возвращают обещание, которое выполняется после завершения асинхронной операции.
import { unlink } from 'fs/promises';
try { await unlink('/tmp/hello'); console.log('successfully deleted /tmp/hello'); } catch (error) { console.error('there was an error:', error.message); }
Пример обратного вызова #
Форма обратного вызова принимает функцию обратного вызова завершения в качестве последнего аргумента и вызывает операцию асинхронно. Аргументы, передаваемые обратному вызову завершения, зависят от метода, но первый аргумент всегда зарезервирован для исключения. Если операция выполнена успешно, то первым аргументом будет null
или undefined
.
import { unlink } from 'fs';
unlink('/tmp/hello', (err) => { if (err) throw err; console.log('successfully deleted /tmp/hello'); });
Версии API-интерфейсов модуля fs
на основе обратного вызова предпочтительнее использования API-интерфейсов обещаний, когда требуется максимальная производительность (как с точки зрения времени выполнения, так и с точки зрения выделения памяти).
События модуля
Большая часть основного API Node.js построена на идиоматической асинхронной архитектуре, управляемой событиями, в которой определенные виды объектов (называемые «эмиттерами») генерируют именованные события, вызывающие вызов Function
объектов («слушателей»).
HTTP-модуль
Для использования HTTP-сервера и клиента необходимо require('http')
.
Интерфейсы HTTP в Node.js предназначены для поддержки многих функций протокола, которые традиционно было сложно использовать. В частности, большие, возможно закодированные сообщения. Интерфейс заботится о том, чтобы никогда не буферизовать целые запросы или ответы, поэтому пользователь может передавать данные в потоковом режиме.