Стандартная библиотека JavaScript (Node.js): полный обзор
Node.js — это среда выполнения JavaScript, построенная на движке V8. Одним из её главных преимуществ является богатая стандартная библиотека, которая предоставляет сотни готовых модулей для решения повседневных задач backend-разработки: от работы с файловой системой до создания HTTP-серверов. В этой статье мы рассмотрим ключевые модули, их возможности и приведём практические примеры кода.
1. Модуль fs (File System)
Модуль fs — основа для работы с файлами и директориями. Поддерживает как синхронные, так и асинхронные операции.
- Чтение файла (асинхронное):
const fs = require('fs');
fs.readFile('example.txt', 'utf8', (err, data) => {
if (err) throw err;
console.log(data);
});
- Запись в файл:
fs.writeFile('output.txt', 'Hello, Node.js!', (err) => {
if (err) throw err;
console.log('Файл сохранён');
});
- Работа с директориями (создание, удаление, чтение):
// Создание папки
fs.mkdir('newDir', { recursive: true }, (err) => {
if (err) throw err;
console.log('Папка создана');
});
// Чтение содержимого папки
fs.readdir('.', (err, files) => {
console.log(files); // массив имён файлов
});
2. Модуль path
Модуль path упрощает работу с путями файлов и папок, независимо от операционной системы.
- Объединение путей:
const path = require('path');
const fullPath = path.join('users', 'admin', 'docs', 'file.txt');
console.log(fullPath); // users/admin/docs/file.txt (в Linux) или users\admin\docs\file.txt (в Windows)
- Получение расширения файла:
const ext = path.extname('image.png');
console.log(ext); // '.png'
- Нормализация пути (убирает лишние «..» и «.»):
const normalized = path.normalize('/foo/bar//baz/asdf/quux/..');
console.log(normalized); // /foo/bar/baz/asdf
3. Модуль http
Позволяет создавать HTTP-серверы и клиенты. Именно на этом модуле построены такие фреймворки, как Express.js.
- Простой HTTP-сервер:
const http = require('http');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Привет, мир!');
});
server.listen(3000, () => {
console.log('Сервер запущен на порту 3000');
});
- HTTP-клиент (делаем GET-запрос):
http.get('http://jsonplaceholder.typicode.com/posts/1', (res) => {
let data = '';
res.on('data', chunk => data += chunk);
res.on('end', () => console.log(JSON.parse(data)));
});
4. Модуль events
Реализует шаблон «Наблюдатель» (EventEmitter). Позволяет создавать собственные события и подписываться на них.
const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter();
// Подписка на событие
myEmitter.on('greet', (name) => {
console.log(`Привет, ${name}!`);
});
// Генерация события
myEmitter.emit('greet', 'Алексей'); // Привет, Алексей!
5. Модуль buffer
Buffer — это временное хранилище для бинарных данных. Используется при работе с потоками, файлами, сетевыми протоколами.
// Создание буфера из строки
const buf = Buffer.from('Hello', 'utf8');
console.log(buf); // <Buffer 48 65 6c 6c 6f>
// Конкатенация буферов
const buf1 = Buffer.from('Node');
const buf2 = Buffer.from('.js');
const result = Buffer.concat([buf1, buf2]);
console.log(result.toString()); // Node.js
6. Модуль stream
Потоки (Streams) позволяют обрабатывать данные по частям, не загружая их целиком в память. Это критически важно для