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/

Опубликовано в категории: Статьи