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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.
Top 16 Node.js NPM Packages for Developers

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 — это минималистичный 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.

2. 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.

3. 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. Sequelize

Sequelize — одна из самых известных ORM для Node.js. Она позволяет разработчикам определять модели на JavaScript, легко выполнять CRUD-операции, управлять отношениями и миграциями в базах данных без необходимости использовать чистый SQL.

Особенности

  • Поддержка MySQL, PostgreSQL, SQLite и MariaDB.

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

  • Управление ассоциациями и отношениями (один-ко-многим, многие-ко-многим).

  • Встроенная поддержка миграций и транзакций.

Установка

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

npm install sequelize
npm install mysql2 // или драйвер другой базы данных, например pg для PostgreSQL

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

С помощью Sequelize вы можете определять модели, которые будут представлять таблицы в вашей базе данных: 

const { Sequelize, DataTypes } = require('sequelize');
const sequelize = new Sequelize('database', 'username', 'password', {
  host: 'localhost',
  dialect: 'mysql' // Вы можете использовать 'postgres', 'sqlite' и т. д.
});

const User = sequelize.define('User', {
  username: {
    type: DataTypes.STRING,
    allowNull: false
  },
  age: {
    type: DataTypes.INTEGER
  }
});

В следующем примере User — это модель, представляющая таблицу пользователей в вашей базе данных. Sequelize оборачивает ее, позволяя использовать модель так, как если бы это был JavaScript-объект.

// Создаем нового пользователя.
User.create({ username: 'JohnDoe', age: 30 });

// Ищем пользователя.
User.findOne({ where: { username: 'JohnDoe' } });

// Изменяем данные пользователя.
User.update({ age: 31 }, { where: { username: 'JohnDoe' } });

// Удаляем пользователя.
User.destroy({ where: { username: 'JohnDoe' } });

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

const Post = sequelize.define('Post', { title: DataTypes.STRING });
User.hasMany(Post);
Post.belongsTo(User);

Это создаст необходимые отношения внешних ключей между таблицами users и posts.

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

5. 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. Webpack

Webpack — популярный пакет модулей для JavaScript-приложений, используемый в основном для объединения и управления зависимостями при веб-разработке. Он принимает различные модули (JavaScript, CSS, изображения и т. д.) и компилирует их в один или несколько оптимизированных для развертывания пакетов.

Особенности

  • Упаковка пакетов с JavaScript, CSS, изображениями и прочими типами данных в оптимизированные файлы.

  • Разделение кода для повышения производительности.

  • Поддержка загрузчиков для работы с различными типами файлов (Babel, Sass и т.д.).

  • Горячая замена модулей для ускорения разработки.

Установка

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

npm install webpack webpack-cli --save-dev

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

Webpack начинает с точки входа, обычно это ваш основной JavaScript-файл, и строит граф зависимостей, анализируя все модули (JavaScript, CSS, изображения и т. д.), необходимые для вашего проекта. Затем он объединяет эти файлы в оптимизированные для развертывания выходные файлы.

Процесс происходит следующим образом:

  • Точка входа — Webpack начинает упаковку с указанного начального файла (например, src/index.js).

  • Загрузчики — Он использует загрузчики для предварительной обработки таких файлов, как JavaScript (через Babel) и CSS (через style-loader).

  • Плагины — Дополнительные задачи, такие как оптимизация кода или генерация HTML-файлов, выполняются плагинами.

  • Результат — Конечный оптимизированный пакет (пакеты) сохраняется в выходном каталоге (например, dist/).

// webpack.config.js
const path = require('path');

module.exports = {
  entry: './src/index.js',
  output: {
    filename: 'bundle.js',
    path: path.resolve(__dirname, 'dist')
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /node_modules/,
        use: {
          loader: 'babel-loader'
        }
      }
    ]
  }
};

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

7. 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.

8. JsonWebTokens (JWT)

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.

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

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 — это служебная библиотека на 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); // Output: [[1, 2], [3, 4], [5, 6]

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

Вы можете найти рабочую демонстрацию 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 — это популярный 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. Winston

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

Особенности

  • Несколько способов логирования (файл, консоль, удаленные службы).

  • Настраиваемые уровни логирования (например, ошибка, предупреждение, информация, отладка).

  • Форматирование и окрашивание логов.

  • Поддержка обработки исключений и не пойманных ошибок.

Установка

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

npm install winston

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

Вот как можно настроить Winston на вывод сообщений в консоль или в файл:

const winston = require('winston');

const logger = winston.createLogger({
  level: 'info',
  format: winston.format.combine(
    winston.format.colorize(),
    winston.format.simple()
  ),
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'logs/app.log' })
  ]
});

logger.info('This is an informational message');
logger.error('This is an error message');

В этом примере Winston записывает сообщения в консоль и файл app.log. Он форматирует сообщения с помощью цветов и простого текста, чтобы их было легче читать в консоли. Winston также поддерживает обработку ошибок, регистрируя не пойманные исключения и не обработанные отказы промисов, что гарантирует, что критические ошибки будут зафиксированы и записаны в логах для последующего анализа.

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

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. Moment

Moment.js — одна из самых популярных JavaScript-библиотек для парсинга, проверки и манипулирования датами и временем. Она упрощает работу с датами, поддерживает часовые пояса и предлагает форматирование с учетом местных особенностей.

Особенности

  • Упрощает парсинг, проверку и форматирование даты.

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

  • Предоставляет утилиты для относительного времени (например, “5 минут назад”).

Установка

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

npm install moment

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

Вот как можно создать Moment-объект из строки даты, а затем отформатировать его нужным вам образом:

const moment = require('moment');

const now = moment(); // Текущая дата и время
console.log(now.format('MMMM Do YYYY, h:mm:ss a'));

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

16. Joi

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

Особенности

  • Валидация объектов, массивов, чисел и других объектов на основе схем.

  • Пользовательские правила проверки и сообщения об ошибках.

  • Встроенное приведение и преобразование типов.

  • Поддерживает проверку вложенных объектов.

Установка

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

npm install joi

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

Вот пример использования Joi для проверки пользовательского объекта:

const Joi = require('joi');

const schema = Joi.object({
  name: Joi.string().min(3).required(),
  age: Joi.number().integer().min(0).required()
});

const userInput = { name: 'John', age: 25 };

const validation = schema.validate(userInput);

if (validation.error) {
  console.log('Validation error:', validation.error.details);
} else {
  console.log('Valid data:', userInput);
}

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

Joi также поддерживает пользовательские правила валидации, что позволяет расширить ее функциональность для более специфических нужд:

const customSchema = Joi.string().custom((value, helpers) => {
  if (value === 'forbidden') {
    return helpers.error('any.invalid');
  }
  return value; // Валидные данные
});

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

Заключение

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


19 марта пройдет открытый урок на тему «Прототипное наследование в JavaScript».

На данном занятии мы разберемся, что такое прототипное наследование в JavaScript и как оно может помочь при разработке программ. Записаться можно по ссылке.

Источник: https://habr.com/ru/companies/otus/articles/891612/


Интересные статьи

Интересные статьи

Привет, Хабр! Сегодня поговорим о том, как расшифровывать звонки с клиентами через CRM-систему Битрикс24 вместо CoPilot. Для автоматизации подключим платформу МТС Exolve. Вы сможете получать все запис...
Разработчики часто встречаются с непредвиденными сложностями, причем иногда крайне непросто найти причину. На одном из проектов мы столкнулись с серьезной проблемой, которую не смогли сразу решить даж...
В JavaScript нету привычной системы классов как в Java, или C#. В языке заместо этого есть система объектов, где каждый объект наследуется от другого, сохраняя его цепь прототипов. Однако мы имеем воз...
Всем доброго времени суток. Мы решили описать построение отказоустойчивой инфраструктуры для bitrix в рамках серии статей, и сегодня публикуем первую часть. Вариант, который мы будем описывать, - не и...
Проектирование – один из важных шагов при разработке программы, который очень часто игнорируется начинающими разработчиками. Обычно они пытаются удержать всё в голове или...