Проекты Node.js. Создание реальных веб-приложений и API для бэкенда

от автора

Представляем практическое руководство для широкого круга разработчиков на JavaScript по освоению серверной платформы Node.js на реальных проектах.

Книга проводит читателя от настройки окружения до создания современных бэкенд-приложений: агрегатора контента, менеджера паролей, веб-парсера, анализа тональности текста, маркетинговой рассылки, системы аутентификации с JWT, децентрализованного музыкального маркетплейса и ИИ-ассистента на основе Google Gemini API. Каждый проект построен по принципам инженерного мышления: планирование, чистый код и архитектура, итеративная разработка. Рассматриваются работа с Fastify, MongoDB, Redis, асинхронное программирование, функции реального времени и безопасность. Описаны способы перехода от прототипов к масштабируемым продакшн-решениям.

Все используемые в книге инструменты — с открытым исходным кодом: Fastify, MongoDB, Redis, RabbitMQ, Puppeteer, SQLite. Они не требуют зарубежных аккаунтов, платных подписок или облачных провайдеров. Все это устанавливается локально или на своем сервере.

Единственное исключение составляет Google Gemini API в финальной главе. Но его безболезненно можно заменить на российские аналоги: Yandex GPT или GigaChat. Книга дает универсальный инженерный подход, который работает с любыми инструментами, а полученные навыки применимы в любых условиях.

Проекты выстроены по принципу «от простого к сложному», и каждый следующий надстраивается над предыдущим. При этом каждый проект добавляет новый инструмент и учит выбирать архитектуру под задачу. К концу книги у читателя должна сложиться целостная картина того, как строятся современные бэкенд-системы.

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

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

Глава 1. Введение и настройка

Подготовка среды разработки. Установка Visual Studio Code и знакомство с основами платформы.

Описана архитектура Node.js, цикл обработки событий и библиотека Libuv. Рассмотрены потоки, буферы и кластеризация для масштабирования приложений.

Основное внимание уделено фреймворку Fastify, который используется во всех проектах книги. Fastify. Это проект с открытым исходным кодом (MIT-лицензия), и его можно использовать в России без ограничений.

Приведено сравнение Fastify с Express, Koa и Hapi.

Практические упражнения: проверка установки Node и VS Code через создание файла index.js, инициализация и запуск шаблонного проекта Fastify на порту 3000.

Результат: среда полностью готова к разработке.

Глава 2. Практическое применение

Создание простого приложения для работы с командной строкой. Читатель разрабатывает скрипт, который преобразует контактные данные из физических карточек в CSV-файл.

Рассмотрена работа со встроенными модулями Node. Для чтения пользовательского ввода используется модуль readline, для записи данных в файл модуль fs. Показано, как с помощью модулей ввода readline и записи fs организовать интерактивный диалог с пользователем в терминале.

Затем код рефакторится с использованием внешних пакетов prompt и csv-writer. Что демонстрирует эволюцию кода: сначала решение на встроенных средствах, затем улучшение с помощью сторонних библиотек.

Упражнения: проверка email и номера телефона, добавление временной метки в каждую запись.

Результат: работающее CLI-приложение для сбора контактной информации и сохранения ее в структурированном формате.

Глава 3. Создание веб-сервера Node

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

Рассмотрена работа с маршрутами Fastify для обработки HTTP-запросов. Для отображения страниц используется шаблонизатор EJS и плагин @fastify/view. Данные меню и времени работы вынесены в отдельные модули, что демонстрирует организацию кода проекта.

Затем добавляются статические ресурсы с помощью плагина @fastify/static. Подключение CSS-стилей улучшает внешний вид страниц. Проект эволюционирует от простого текстового ответа к полноценному веб-сайту с версткой.

Упражнения: добавление страницы «О ресторане», отображение текущего статуса работы заведения.

Результат: работающий веб-сервер на Fastify с тремя страницами, стилизованными с помощью CSS, и понимание принципов обработки запросов.

Глава 4. Создание безопасного локального менеджера паролей

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

Рассмотрена работа с библиотекой bcrypt для хеширования паролей. Показано, как хешируется мастер-пароль и как выполняется сравнение введенного пароля с сохраненным хешем. На начальном этапе данные хранятся в памяти приложения (mockDB), для ввода используется пакет prompt-sync.

Затем добавляется MongoDB для постоянного хранения. Читатель подключается к локальной базе данных, создает коллекции auth и passwords, заменяет временное хранилище на запросы к БД. Показано, как сохранять хеш мастер-пароля и управлять списком паролей через findOneAndUpdate.

Упражнения: настройка количества раундов соли, поиск пароля по имени источника.

Результат: работающее приложение для хранения паролей с хешированным мастер-паролем, постоянным хранением в MongoDB и возможностью просмотра сохраненных паролей.

Более коротко о последующих главах.

Глава 5. Агрегация контента. Парсинг RSS-фидов и API, создание агрегатора контента с фильтрацией по ключевым словам. Использование пакетов rss-parser и fetch.

Глава 6. Создание API для библиотеки. RESTful API на Fastify с CRUD-операциями, подключение к SQLite через Sequelize. Маршрутизация, работа с моделями.

Глава 7. Анализ настроений с помощью обработчика естественного языка. Приложение для анализа тональности текста с использованием NLP-пакетов (natural, sentiment). Предварительная обработка текста: исправление орфографии, токенизация, стемминг, удаление стоп-слов. Визуализация результатов в консоли с asciichart.

Глава 8. Приложение для маркетинговой рассылки.  Отправка email через nodemailer, сбор и валидация адресов, верификация, отслеживание открытий писем с помощью маркетингового пикселя, планировщик задач (node-schedule).

Глава 9. Приложение для веб-скраппинга. Парсинг HTML с cheerio, использование безголового браузера Puppeteer для сайтов с динамическим контентом.

Глава 10. Аутентификация приложения. Реализация входа/регистрации с Passport.js, хеширование паролей через crypto.pbkdf2, поддержка сессий и JWT для API-аутентификации.

Глава 11. Приложение для управления заказами.  Системы очередей, от простого массива до Redis (Pub/Sub) и RabbitMQ. Разделение на микросервисы (основной, выполнения, аналитики).

Глава 12. Блокчейн-рынок музыкальных лейблов. Создание собственного блокчейна, классы Block, Blockchain, Transaction, MarketplaceNode. Майнинг, консенсус, синхронизация узлов.

Глава 13. Создание обучающего ассистента на базе искусственного интеллекта. Интеграция с Google Gemini API, промт-инжиниринг, персонализация ответов на основе профиля обучения, JWT-аутентификация, хранение данных в SQLite.

Приложения.  Подсказки по инициализации проектов, настройка инструментов (Git, ESLint, Prettier, Postman, nodemon), работа с базами данных (MongoDB, PostgreSQL, SQLite, Redis, RabbitMQ), контейнеризация с Docker, настройка аккаунтов и API-ключей.

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

Об авторе

Джонатан Векслер, автор известного бестселлера «Get Programming with Node.js» (Manning, 2019). разработчик с глубоким бэкграундом в теории вычислений и веб-разработке, работает старшим разработчиком в финансовой медиакомпании Bloomberg LP. Он курировал учебную программу по Node.js в качестве академического директора и ведущего разработчика в учебном центре New York Code and Design Academy, обучал студентов на интенсивных курсах по fullstack-разработке. 

 

ссылка на оригинал статьи https://habr.com/ru/articles/1072438/