[Перевод] 16 NPM-пакетов, о которых должен знать каждый Node.js-разработчик

TL; DR: обзор 16 основных пакетов для Node.js‑разработки, доступных в NPM, включая Express.js для создания веб‑приложений, Axios для выполнения HTTP‑запросов и Mongoose для работы с базами данных MongoDB.

Node.js зарекомендовала себя как одна из лучших сред в области веб‑разработки, позволяющая создавать мощные масштабируемые приложения. По большей части это можно объяснить обширной экосистемой пакетов, доступных разработчикам в Node Package Manager (NPM). Эти пакеты помогают разработчикам ускорить выполнение задач, повышают производительность и избавляют от необходимости изобретать велосипеды.

В этой статье мы рассмотрим 16 обязательных для любого Node.js‑разработчика NPM‑пакетов. Мы подробно расскажем о них, включая их ключевые особенности, как их установить и как именно вы можете использовать их в своих проектах для улучшения ваших рабочих процессов.

1. Express

Express
Источник: Express

Express — это минималистичный Node.js‑фреймворк для создания веб‑приложений и API. Он упрощает обработку HTTP‑запросов и ответов, при этом предоставляя разработчикам достаточно гибкости, чтобы они могли создавать приложения так, как им нужно.

Особенности

  • Легковесный и быстрый.

  • Поддержка middleware для расширения функционала.

  • Упрощенная маршрутизация.

  • Служебные методы HTTP для обработки ответов.

Установка

Для установки NPM‑пакета Express достаточно использовать следующую команду:

npm install express

Как он работает?

Express обеспечивает гибкую маршрутизацию с помощью таких методов, как app.get () и app.post (), и middleware‑функций, таких как express.json (), для таких задач, как парсинг JSON, защита данных и логирование. Вспомогательные методы res.send () и res.json () упрощают отправку HTML‑ или JSON‑ответов.

Вот пример простого сервера Express с двумя маршрутами:

const express = require('express');
const app = express();

app.use(express.json()); // Middleware для обработки JSON-тела запроса.

// Маршрут для обработки GET-запросов.
app.get('/', (req, res) => {
  res.send('Welcome to the Express web server!');
});

// Маршрут для обработки POST-запросов.
app.post('/submit', (req, res) => {
  const data = req.body;
  res.send(Data received: ${JSON.stringify(data)} );
});

Рабочую демонстрацию Express можно найти на StackBlitz.

Современная альтернатива: Fastify

Хотя Express.js по‑прежнему остается самым популярным веб‑фреймворком для Node.js, сегодня многие проекты делают выбор в пользу Fastify — быстрого и лёгкого фреймворка нового поколения. Fastify особенно популярен благодаря отличной производительности, встроенным возможностям валидации данных и нативной поддержке TypeScript.

  • Высокая производительность (по тестам, существенно быстрее Express).

  • Простая интеграция с TypeScript и автоматическая генерация типов.

  • Удобная система плагинов и middleware.

  • Встроенная JSON‑сериализация и поддержка схем для валидации запросов.

Установка

npm install fastify

Пример использования Fastify:

const fastify = require('fastify')({ logger: true });

// Определение маршрута для GET-запроса
fastify.get('/', async (request, reply) => {
  return { message: 'Welcome to Fastify!' };
});

// Запуск сервера
fastify.listen({ port: 3000 }, (err, address) => {
  if (err) {
    fastify.log.error(err);
    process.exit(1);
  }
  fastify.log.info(`Server listening at ${address}`);
});

2. Axios

Axios
Источник: Axios

Axios — это HTTP‑клиент на основе промисов, который упрощает отправку HTTP‑запросов из Node.js и браузеров. По умолчанию Axios обрабатывает промисы (специальные объекты, которые содержат свое состояние), делая получение асинхронных данных простым и читаемым.

Особенности

  • Обеспечивает поддержку промисов для обработки асинхронных запросов.

  • Автоматическое преобразование данных запроса/ответа (по умолчанию JSON).

  • Перехватчики для изменения чего‑либо в запросе или ответе.

  • Прерывает сбои запросов с помощью встроенной системы обработки ошибок.

Установка

Для установки NPM‑пакета Axios достаточно использовать следующую команду:

npm install axios

Как он работает?

Axios берет на себя автоматизацию таких задач, как преобразование данных в JSON и обработка ошибок. Например, если разработчик получает данные с помощью метода axios.get (), он автоматически парсит ответ в JavaScript‑объект.

axios.get('https://api.example.com/data')
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.error(error);
  });

С помощью перехватчиков (interceptors) Axios вы можете изменять запросы и ответы, например, добавлять токены аутентификации или вести логи. Ниже приведен пример с заголовками аутентификации.

axios.interceptors.request.use(config => {
  config.headers.Authorization = 'Bearer token';
  return config;
});

Рабочую демонстрацию Axios можно найти на StackBlitz.

Нативная альтернатива Axios: Fetch API (Node.js 18+)

Начиная с версии Node.js 18, в платформе появился встроенный API fetch, ранее доступный только в браузерах. Это позволяет вам отправлять HTTP‑запросы без необходимости установки дополнительных пакетов вроде Axios, особенно в небольших проектах.

Пример использования fetch в Node.js:

Пример использования fetch в Node.js:
// GET-запрос с использованием fetch
fetch('https://api.example.com/data')
  .then(res => res.json())
  .then(data => console.log(data))
  .catch(err => console.error(err));


// Использование async/await
async function fetchData() {
  try {
    const res = await fetch('https://api.example.com/data');
    const data = await res.json();
    console.log(data);
  } catch (err) {
    console.error(err);
  }
}
fetchData();

Тем не менее, Axios по‑прежнему остаётся полезным выбором в сложных сценариях, требующих дополнительных функций, таких как перехватчики, отмена запросов и автоматическая сериализация.

3. Mongoose

Mongoose
Источник: Mongoose

Mongoose — это ORM‑библиотека MongoDB для Node.js. Она позволяет разработчикам определять формат, в котором должны храниться данные MongoDB, и предоставляет простой способ взаимодействия с MongoDB через JavaScript‑объекты.

Особенности

  • Моделирование данных на основе схем.

  • Встроенная проверка данных.

  • Обработка сложной логики с помощью middleware.

  • Построение запросов и популирование на основе отношений.

Установка

Для установки NPM‑пакета Mongoose достаточно использовать следующую команду:

npm install mongoose

Как он работает?

Mongoose работает со схемами, которые определяют структуру хранимых в БД данных. Схема в Mongoose сопоставляется с коллекцией MongoDB и определяет форму документов в этой коллекции. После определения схемы модели Mongoose позволяют разработчикам легко выполнять операции создания, чтения, обновления и удаления данных.

Определение схемы в Mongoose выглядит следующим образом:

const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const userSchema = new Schema({
  name: String,
  email: String,
  age: Number
});

В этой схеме Mongoose определяет, что каждый документ в коллекции пользователей будет содержать поля имени, электронной почты и возраста.

Mongoose также заботится о валидации:

const userSchema = new Schema({
  name: { type: String, required: true },
  email: { type: String, required: true },
  age: { type: Number, min: 0 }
});

Теперь каждый раз, когда вы пытаетесь сохранить пользовательский документ, Mongoose будет настаивать на том, что ваше имя и электронная почта обязательны, а ваш возраст должен быть положительным числом.

Middleware‑функции Mongoose выполняются на различных этапах жизненного цикла запроса (до или после сохранения, обновления документа и т. д.). Например, вы можете добавить middleware, которое автоматически обновляет таймстэмп перед сохранением документа. Выглядеть это будет следующим образом:

userSchema.pre('save', function(next) {
  this.updatedAt = Date.now();
  next();
});

4. Prisma

Источник: Prisma
Источник: Prisma

Prisma — это популярный ORM нового поколения, существенно упрощающий работу с базами данных в Node.js‑проектах. Prisma отличается декларативной схемой данных, автоматической генерацией безопасных типов (что особенно удобно при работе с TypeScript) и удобными инструментами для миграций.

Особенности

  • Простая декларативная схема для описания моделей и отношений.

  • Автоматическая генерация строго типизированного клиентского API.

  • Поддержка современных баз данных, включая PostgreSQL, MySQL, SQLite, MongoDB и другие.

  • Мощная CLI и удобные инструменты миграций данных.

Установка

Для установки NPM‑пакета Sequelize достаточно использовать следующую команду:

npm install @prisma/client
npm install prisma --save-dev
npx prisma init

Как он работает?

Определите модель данных в файле schema.prisma:

model User {
  id      Int      @id @default(autoincrement())
  email   String   @unique
  name    String?
  posts   Post[]
}

model Post {
  id        Int     @id @default(autoincrement())
  title     String
  authorId  Int
  author    User    @relation(fields: [authorId], references: [id])
}

После создания схемы и выполнения миграций (npx prisma migrate dev) можно использовать Prisma‑клиент для работы с базой данных:

const { PrismaClient } = require('@prisma/client');
const prisma = new PrismaClient();

async function createUser() {
  const user = await prisma.user.create({
    data: {
      email: 'alice@example.com',
      name: 'Alice'
    }
  });
  console.log(user);
}
createUser();

Sequelize (альтернативный ORM)

Ранее популярный Sequelize также по‑прежнему используется многими проектами и предоставляет поддержку MySQL, PostgreSQL, SQLite и MariaDB. Однако сегодня он постепенно уступает место Prisma, особенно в TypeScript‑проектах.

5. Socket.io

Socket.io
Источник: Socket.io

Socket.io— это библиотека, обеспечивающая двунаправленную связь между веб‑клиентами и серверами в режиме реального времени. Хорошим примером могут служить чат‑приложения, уведомления в реальном времени или многопользовательские игры.

Особенности

  • Обеспечивает связь в режиме реального времени на основе событий.

  • Поддерживает протокол WebSocket с возможностью fallback«а.

  • Работает на множестве разных платформ и устройств.

  • Простая интеграция с Node.js‑серверами.

Установка

Для установки NPM‑пакета Socket.io достаточно использовать следующую команду:

npm install socket.io

Как он работает?

Ниже представлен пример чата, в котором пользователи могут отправлять сообщения другим пользователям в режиме реального времени. Сервер будет прослушивать входящие соединения от клиента. Он отправляет приветственное сообщение, когда соединение установлено, а затем транслирует сообщения чата всем подключенным в данный момент клиентам.

Серверная сторона (Node.js):

const io = require('socket.io')(3000);

io.on('connection', socket => {
  console.log('A user connected');
  socket.emit('message', 'Welcome to the chat!');

  socket.on('chatMessage', msg => {
    io.emit('message', msg); // Передача сообщения всем клиентам
  });

  socket.on('disconnect', () => {
    console.log('User disconnected');
  });
});

Клиентская сторона (HTML/JavaScript):

const socket = io('http://localhost:3000');

socket.on('message', message => {
  console.log(message);
});

document.getElementById('sendButton').addEventListener('click', () => {
  const msg = document.getElementById('messageInput').value;
  socket.emit('chatMessage', msg);
});

Рабочую демонстрацию Socket.io можно найти на StackBlitz.

6. Vite

Источник: Vite
Источник: Vite

Vite — это чрезвычайно быстрый инструмент сборки JavaScript‑приложений и сервер разработки нового поколения. Он завоевал широкую популярность среди frontend‑разработчиков благодаря мгновенной перезагрузке модулей (HMR), минимальной конфигурации и отличной поддержке современных фреймворков, таких как React, Vue, Svelte и других.

Основные преимущества Vite:

  • Очень быстрая сборка и запуск проекта благодаря использованию нативных ES‑модулей.

  • Встроенная поддержка TypeScript и JSX.

  • Простая интеграция с React, Vue, Angular, Svelte и другими фреймворками.

  • Минимальное количество конфигурации.

Установка

Создание нового проекта с React на основе Vite выполняется одной командой:

npm create vite@latest my-react-app -- --template react
cd my-react-app
npm install
npm run dev

Как он работает?

Vite использует подход с нативной поддержкой ES‑модулей для ускорения запуска приложений:

Пример минимального проекта с использованием Vite выглядит так:

Структура проекта:

my-react-app/
├── index.html
├── src/
│   ├── App.jsx
│   └── main.jsx
├── vite.config.js
└── package.json

vite.config.js (минимальный пример):

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';


export default defineConfig({
  plugins: [react()],
});

Структура проекта:

npm run build

Webpack (альтернативный сборщик)

Ранее широко использовавшийся Webpack сегодня постепенно уступает место более современным и быстрым инструментам, таким как Vite. Тем не менее, он всё ещё встречается в проектах с более сложной конфигурацией.

7. Jest

Jest
Источник: Jest

Jest — это мощная платформа тестирования от Facebook, созданная с прицелом на максимальную простоту использования. Jest предлагает полный набор функций тестирования, таких как тестовые утверждения, мокинг и snapshot‑тестирование, а также готовые решения для модульных, интеграционных и сквозных тестов. Довольно простой в использовании, Jest также может без настройки работать прямо из коробки со многими библиотеками и фреймворками JavaScript, включая React и Node.js.

Особенности

  • Отсутствие необходимости что‑либо настраивать для большинства проектов.

  • Встроенные утверждения и программа запуска тестов.

  • Snapshot‑тестирование для компонентов пользовательского интерфейса.

  • Моки и шпионы (spies) для тестирования сложных функций.

Установка

Для установки NPM‑пакета Jest достаточно использовать следующую команду:

npm install --save-dev jest

Как он работает?

Вот базовый тест с использованием Jest, проверяющий, правильно ли функция складывает два числа:

// sum.js
function sum(a, b) {
  return a + b;
}
module.exports = sum;

// sum.test.js
const sum = require('./sum');

test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

Вы можете найти рабочую демонстрацию Jest на StackBlitz.

Научиться всем необходимым навыкам и инструментам, чтобы с нуля стать Fullstack-разработчиком, можно на онлайн‑специализации »Fullstack developer».

Современная альтернатива: Vitest

Стоит отметить, что сейчас активно развивается Vitest — новая и быстрая платформа тестирования, совместимая с Jest по API, но предлагающая улучшенную производительность и нативную интеграцию с современными инструментами сборки, такими как Vite и ESBuild.

Чтобы попробовать Vitest в своем проекте, выполните команду:

npm install --save-dev vitest

Пример базового теста с Vitest выглядит практически идентично Jest:

// sum.js
export const sum = (a, b) => a + b;


// sum.test.js
import { sum } from './sum';


test('adds 1 + 2 to equal 3', () => {
  expect(sum(1, 2)).toBe(3);
});

8. JsonWebTokens (JWT)

JsonWebTokens
Источник: JsonWebTokens

JsonWebToken — одна из самых популярных библиотек Node.js для аутентификации на основе токенов. Она предоставляет компактное средство для безопасной передачи информации. JWT имеют цифровую подпись и широко используются для stateless аутентификации, избавляя сервер от необходимости хранить данные о сеансе.

Особенности

  • Безопасная передача данных между сторонами.

  • Аутентификация без сохранения данных, что снижает нагрузку на сервер.

  • Поддерживаются как подписанные, так и зашифрованные токены.

  • Хорошо работает с различными фреймворками аутентификации, такими как Passport.

Установка

Для установки NPM‑пакета JWT достаточно использовать следующую команду:

npm install jsonwebtoken

Как он работает?

В следующем примере создается JWT, содержащий полезную нагрузку userId: 123. Он подписывает токен секретным ключом и устанавливает срок его действия в 1 час. Теперь, когда клиент отправляет токен обратно на ваш сервер, ваш сервер может проверить, что токен подлинный и не изменен, поскольку он был подписан правильным секретным ключом. Функция jwt.verify проверяет подпись токена и срок его действия. Если токен действителен, она возвращает декодированную полезную нагрузку, позволяя серверу получить доступ к userId и любой другой информации, содержащейся в токене. Если токен недействителен или срок его действия истек, возвращается ошибка, предотвращающая несанкционированный доступ.

const jwt = require('jsonwebtoken');

const token = jwt.sign({ userId: 123 }, 'your-secret-key', { expiresIn: '1h' });
console.log(token);


jwt.verify(token, 'your-secret-key', (err, decoded) => {
  if (err) {
    console.log('Invalid token');
  } else {
    console.log('Valid token:', decoded);
  }
});

Рабочую демонстрацию JsonWebTokens можно найти на StackBlitz.

9. Cors

CORS расшифровывается как Cross‑Origin Resource Sharing. Это то, что разработчики браузеров внедряют в качестве защиты, не позволяющей веб‑страницам обращаться к доменам, отличным от их собственных. Пакет CORS в Node.js настраивает домены, которым разрешено взаимодействовать с вашим API. Это особенно полезно при размещении клиента и сервера на разных доменах или портах. Вы можете быть уверены, что обмен данными между источниками происходит безопасно и под контролем.

Особенности

  • Обеспечивает легкую настройку cross‑origin политик.

  • Позволяет настраивать определенные домены, методы и заголовки.

  • Поддержка предварительных запросов для метода OPTIONS.

Установка

Для установки NPM‑пакета CORS достаточно использовать следующую команду:

npm install cors

Как он работает?

Вот как можно разрешить в CORS все домены:

const cors = require('cors');
const express = require('express');
const app = express();

app.use(cors()); // Включаем CORS для всех источников.

Вы также можете настроить CORS так, чтобы были разрешены только определенные домены:

app.use(cors({
  origin: 'https://example.com' // Разрешаем только этот домен.
}));

Кроме того, вы можете указать другие параметры, например разрешенные методы HTTP или заголовки.

app.use(cors({
  origin: 'https://example.com',
  methods: ['GET', 'POST'],
  allowedHeaders: ['Content-Type', 'Authorization']
}));

Рабочую демонстрацию CORS можно найти на сайте StackBlitz.

10. Lodash

Lodash
Источник: Lodash

Lodash — это служебная библиотека на JavaScript для глубокого клонирования, манипуляций с массивами, слияния объектов и многого другого. Она облегчает жизнь разработчикам при работе со сложными преобразованиями данных, позволяя им писать более чистый и эффективный код.

Особенности

  • Глубокое клонирование объектов и массивов.

  • Функции для работы с массивами и объектами.

  • Оптимизированная производительность для работы с большими массивами данных.

  • Вспомогательные функции из функционального программирования (например, map, reduce, filter).

Установка

Для установки NPM‑пакета Lodash достаточно использовать следующую команду:

npm install lodash

Как он работает?

Lodash предоставляет множество служебных функций, облегчающих работу со стандартными структурами данных JavaScript. Одной из самых мощных функций является поддержка глубокого клонирования — способа получения реальной копии объекта или массива с сохранением вложенных данных.

Пример глубокого клонирования объекта:

const _ = require('lodash');

const original = { name: 'Mark', age: 30, nested: { city: 'London' } };
const clone = _.cloneDeep(original);

console.log(clone); // Вывод: { name: 'Mark', age: 30, nested: { city: 'London' } }

Среди остальных приятных утилит для работы с массивами, доступных в Lodash, можно выделить _.chunk (). chunk разбивает массив на части заданного размера:

const array = [1, 2, 3, 4, 5, 6];
const chunked = _.chunk(array, 2);
console.log(chunked); // Вывод: [[1, 2], [3, 4], [5, 6]]

В дополнение к этим утилитам Lodash предоставляет функции для работы с объектами, массивами и строками в стиле функционального программирования, что делает ваш код более лаконичным и удобным для чтения.

Можно ли сегодня обойтись без Lodash?

Lodash продолжает широко использоваться в проектах, где необходимо работать со сложными структурами данных или осуществлять глубокое клонирование. Однако в современном JavaScript появилось много встроенных методов, которые делают использование Lodash необязательным во многих случаях.

Вот несколько примеров популярных методов Lodash и их нативных аналогов:

  • _.cloneDeep (obj) → structuredClone (obj) (глубокий клон) или {…obj } (неглубокий клон)

  • _.chunk (arr, size) → можно реализовать вручную через цикл и метод.slice ()

  • _.merge (obj1, obj2) → {…obj1,…obj2 } (поверхностное слияние)

  • _.uniq (arr) → […new Set (arr)]

  • _.debounce (fn, delay) → можно реализовать вручную через использование setTimeout и clearTimeout

Вывод: Используйте Lodash, когда это действительно оправдано (например, глубокая работа с вложенными объектами). В остальных случаях нативный JavaScript может предложить вам аналогичные и более легкие по размеру решения.

Вы можете найти рабочую демонстрацию Lodash на StackBlitz.

11. Bcrypt

Bcrypt — одна из самых востребованных библиотек для хеширования паролей в Node.js. Она обеспечивает защищенный метод хеширования и сравнения паролей, что очень важно для защиты пользовательских данных в приложениях, использующих аутентификацию.

Особенности

  • Защищенное хэширование паролей.

  • Автоматический salting для усиления хэшей паролей.

  • Поддерживает сравнение паролей.

  • Устойчивость к brute‑force атакам.

Установка

Для установки NPM‑пакета Bcrypt достаточно использовать следующую команду:

npm install bcryptjs

Как он работает?

В основе работы Bcrypt лежит механизм хеширования пароля и хранения его в базе данных. При входе в систему введенный пароль сравнивается с сохраненным хэшем.

Вот как выглядит хэширование пароля с помощью Bcrypt:

const bcrypt = require('bcryptjs');

const password = 'myPassword123';
bcrypt.hash(password, 10, (err, hash) => {
  if (err) throw err;
  console.log(hash); // Хешированный пароль
});

Чтобы сравнить пароль с сохраненным хэшем:

bcrypt.compare('myPassword123', hash, (err, res) => {
  if (res) {
    console.log('Password matches');
  } else {
    console.log('Password does not match');
  }
});

Рабочую демонстрацию Bcrypt можно найти на StackBlitz.

12. Dotenv

Dotenv
Источник: Dotenv

Dotenv — это популярный NPM‑пакет для поддержки переменных окружения в приложениях Node.js. Он позволяет надежно хранить конфиденциальные данные, такие как ключи API или учетные данные баз данных, вне основной кодовой базы, сохраняя чистоту и защищенность конфигурации.

Особенности

  • Загружает переменные окружения из файла.env в файл process.env.

  • Обеспечивает защищенность конфиденциальных данных и отделяет их от вашего кода.

  • Работает в различных средах (разработка, тестирование, производство).

Установка

Для установки NPM‑пакета Dotenv достаточно использовать следующую команду:

npm install dotenv

Как он работает?

Чтобы использовать Dotenv, создайте файл.env в корне проекта и определите переменные окружения:

DATABASE_URL=postgres://user:password@localhost:5432/mydb
API_KEY=123456789abcdef

Затем в своем приложении загрузите эти переменные с помощью Dotenv:

require('dotenv').config();

console.log(process.env.DATABASE_URL); // Вывод: postgres://user:password@localhost:5432/mydb

Вы можете создавать отдельные файлы.env для управления различными окружениями. Вы можете легко менять окружения, не трогая кодовую базу.

Рабочую демонстрацию Dotenv можно найти на StackBlitz.

13. Pino

Источник: Pino
Источник: Pino

Pino — это очень быстрая библиотека логирования для Node.js‑приложений, завоевавшая популярность благодаря минималистичному подходу, высокой производительности и простоте использования. Pino особенно полезен в высоконагруженных проектах, где производительность логирования влияет на общую скорость работы приложения.

Особенности

  • Высокая производительность (в десятки раз быстрее Winston как основного предшественника).

  • Простой и лаконичный API.

  • Удобная интеграция с внешними сервисами логирования.

  • Минимальные накладные расходы на ресурсы приложения.

Установка

Для установки NPM‑пакета Pino достаточно использовать следующую команду:

npm install pino

Для красивого вывода логов в консоль можно использовать pino‑pretty:

npm install pino-pretty --save-dev

Как он работает?

Пример простого логирования с помощью Pino выглядит следующим образом:

const pino = require('pino');
const logger = pino({
  level: 'info',
  transport: {
    target: 'pino-pretty'
  }
});


logger.info('Приложение успешно запущено.');
logger.error('Произошла ошибка при обработке запроса.');
Также Pino поддерживает структурированное логирование:
logger.info({ userId: 123, action: 'login' }, 'Пользователь вошёл в систему.');

Winston (альтернатива для логирования)

Ранее популярная библиотека Winston по‑прежнему используется во многих приложениях благодаря широким возможностям и разнообразию плагинов. Однако сегодня предпочтение часто отдают более быстрым и лёгким решениям, таким как Pino.

14. Morgan

Morgan — это middleware для регистрации HTTP‑запросов для Node.js. Он регистрирует все HTTP‑запросы к вашему серверу в формате, который вы определяете сами. Вероятно, он наиболее известен благодаря использованию в приложениях Express для регистрации входящих запросов, чтобы отслеживать трафик и помогать отлаживать проблемы, записывая подробную информацию о каждом запросе, включая метод запроса, URL запроса, время ответа и статус ответа.

Особенности

  • Протоколирование HTTP‑запросов для приложений Express.

  • Предопределенные форматы логов (например, комбинированный, общий, dev).

  • Настраиваемые строки формата лога.

  • Возможность отображать в логах дополнительную информацию, например время ответа и код состояния.

Установка

Для установки NPM‑пакета Morgan достаточно использовать следующую команду:

npm install morgan

Как он работает?

Вот выглядит использование Morgan с Express‑приложением:

const morgan = require('morgan');
const express = require('express');
const app = express();

// Используем комбинированный формат логов
app.use(morgan('combined'));

app.get('/', (req, res) => {
  res.send('Hello, Morgan!');
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

В приведенном выше примере показано, как Morgan устанавливает логирование для каждого входящего HTTP‑запроса в комбинированном формате, включая удаленный IP, метод — URL, время ответа и код состояния. Morgan также позволяет определять пользовательские форматы логов, указывая строку формата. Например, вы можете записывать в логи только метод запроса, URL и код состояния:

app.use(morgan(':method :url :status'));

Рабочую демонстрацию Morgan можно найти на сайте StackBlitz.

15. Day.js

Источник: Day.js
Источник: Day.js

Day.js — это современная и лёгкая JavaScript‑библиотека для работы с датами и временем, которая появилась как альтернатива устаревшему Moment.js. Она имеет почти такой же API, как Moment.js, но обладает существенно меньшим размером и лучшей производительностью.

Особенности

  • Минимальный размер (всего ~2kb gzip).

  • Практически идентичный Moment.js синтаксис.

  • Модульная структура с возможностью подключать только необходимые плагины.

  • Поддержка часовых поясов и локализаций.

Установка

Для установки NPM‑пакета Day.js используйте следующую команду:

npm install dayjs

Как он работает?

Пример работы с Day.js

// Получение текущей даты и времени
const now = dayjs();
// Форматирование даты
console.log(now.format('MMMM D, YYYY h:mm A')); 
// Добавление времени
console.log(now.add(1, 'week').format('MMMM D, YYYY'));

Рабочую демонстрацию Day.js можно найти на сайте StackBlitz.

16. Zod

Источник: Zod
Источник: Zod

Zod — это мощная и удобная библиотека для валидации и преобразования данных в Node.js и TypeScript. Она позволяет вам описывать структуры данных с помощью простого, лаконичного API и автоматически генерировать TypeScript‑типы, делая ваш код одновременно безопасным и чистым.

Особенности

  • Отличная интеграция с TypeScript с автоматической генерацией типов.

  • Удобный и лаконичный API для описания схем данных.

  • Мощная валидация, включая поддержку кастомных правил и преобразований данных.

  • Минимальный размер и отсутствие зависимостей.

Установка

Для установки NPM‑пакета Zod достаточно использовать следующую команду:

npm install zod

Как он работает?

const { z } = require('zod');


// Описание схемы данных
const userSchema = z.object({
  username: z.string().min(3, { message: 'Username должен содержать не менее 3 символов' }),
  email: z.string().email({ message: 'Некорректный формат email' }),
  age: z.number().int().positive().optional(),
});


// Проверка входящих данных (например, от пользователя)
const inputData = {
  username: 'john_doe',
  email: 'john@example.com',
  age: 28,
};


const validationResult = userSchema.safeParse(inputData);


if (!validationResult.success) {
  console.error(validationResult.error.format());
} else {
  console.log('Проверенные данные:', validationResult.data);
}

Joi (альтернатива для валидации данных)

Ранее очень популярная библиотека Joi продолжает использоваться в существующих Node.js‑проектах для описания схем валидации и проверки данных. Однако сегодня более актуальным и современным решением для новых проектов является Zod, особенно благодаря лучшей интеграции с TypeScript и простоте API.

17. Дополнительные тренды: альтернативные среды выполнения JavaScript

Помимо Node.js, в 2025 году заметно растёт популярность альтернативных сред выполнения JavaScript:

Bun

Bun — это современная среда выполнения JavaScript, созданная с прицелом на максимальную производительность. Она отличается встроенной поддержкой TypeScript,  быстрой сборкой проектов и совместимостью с существующими NPM‑пакетами.

Установка и запуск Bun:

curl -fsSL https://bun.sh/install | bash

Простой запуск JavaScript‑файла:

bun run index.js

Deno

Deno — среда выполнения JavaScript и TypeScript, созданная автором Node.js. Отличается встроенной безопасностью, отсутствием необходимости использовать NPM (хотя совместимость уже реализована) и нативной поддержкой Web API.

Простой запуск JavaScript‑файла:

deno run index.js

Обе среды активно развиваются и представляют интересную альтернативу для современных проектов.

Заключение

Экосистема NPM предоставляет Node.js‑разработчикам универсальный набор пакетов для оптимизации процесса разработки, расширения функциональности и упрощения сложных задач. От Express для веб‑фреймворков до Joi для валидации данных — эти пакеты охватывают важнейшие области разработки современных приложений. Эти популярные NPM‑пакеты позволяют разработчикам создавать более производительные, масштабируемые и поддерживаемые приложения, что, в свою очередь, повышает их качество.

Материал подготовлен в рамках онлайн-специализации «Fullstack developer». На странице специализации можно ознакомиться с подробной программой, а также посмотреть записи открытых уроков.

© Habrahabr.ru