Раздел 1 Введение в Node.js. CLI
Рассмотрим схему работы на курсе. Познакомимся с платформой Node.js и узнаем, для решения каких задач она подходит лучше всего. Обсудим чем серверный код на JavaScript отличается от обычного. Подготовим основу для проекта и напишем первое приложение с интерфейсом командной строки (CLI).
Организационные вопросы.
Обзор личных проектов.
Схема работы на курсе.
Репозиторий демо-проекта.
Свернуть / Развернуть
Практика
TypeScript и Node.js.
Классы в TypeScript.
Подготовка окружения.
Разработка CLI.
Формат данных TSV.
Раздел 2 Цикл событий. Потоки (Streams)
Узнаем, как устроен цикл событий в Node.js. Познакомимся с микро- и макрозадачами. Разберёмся, от чего зависит порядок выполнения асинхронного кода. Затем погрузимся в работу с файловой системой. Узнаем, как читать и создавать файлы, какие есть ограничения, познакомимся с потоками (Streams). На практике разберёмся, как формировать большие файлы с данными и взаимодействовать с удалёнными серверами из Node.js.
Как устроен цикл событий (EventLoop).
Паттерн «Издатель-подписчик» (EventEmitter).
Абстракция Buffer.
Потоки (Streams).
Свернуть / Развернуть
Практика
Экспорт данных в TSV.
Чтение больших файлов.
HTTP-запросы из Node.js.
Раздел 3 Архитектура приложения
Начнём проектировать архитектуру основного приложения. Обсудим разные подходы к построению архитектуры. Узнаем как разбивать приложение на отдельные слои. Спроектируем первые сервисы приложения: управление конфигурацией, логирование. Познакомимся с инверсией управления (IoC) и соберём контейнер зависимостей. Научимся применять библиотеку Inversify и внедрять зависимости.
Переменные окружения.
Логирование.
Свернуть / Развернуть
Практика
Архитектура приложения.
Сервис управления конфигурацией.
Сервис логирования (pino).
IoC.
Внедрение зависимостей.
Раздел 4 Введение в базы данных. MongoDB
Познакомимся с базами данных и узнаем, какие бывают базы данных, и чем они отличаются. Разберёмся, как хранить данные на сервере. На практике познакомимся с MongoDB, научимся запускать её с помощью Docker и попрактикуемся в получении и записи данных. Научимся работать c MongoDB из Node.js: соединение, коллекции, модели (Mongoose, Typegoose).
Введение в базы данных.
Знакомство с Docker.
Mongoose.
Свернуть / Развернуть
Практика
Установка MongoDB.
Клиент для MongoDB.
Mongoose.
Typegoose.
Раздел 5 Базы данных на практике. Проектирование REST
Попрактикуемся в работе с MongoDB из Node.js: опишем все модели, познакомимся с валидаторами, разработаем сервисы для доступа к данным. На практике познакомимся с паттерном DTO (Data Transfer Object). Подключим сервисы для работы с базой данных к CLI. Затем перейдём к проектированию REST API и спроектируем первую версию REST API. Познакомимся с форматом OpenAPI и опишем первую версию спецификации.
Разделение ответственности.
Data Transfer Object.
Проектирование REST API.
Формат OpenAPI, Swagger.
Свернуть / Развернуть
Практика
Сервисы для доступа к данным.
Валидация данных.
Импорт данных в базу (CLI).
Спецификация OpenAPI.
Раздел 6 Express.js
Начнём имплементировать REST API. Познакомимся с фреймворком Express.js, обсудим его сильные и слабые стороны. Познакомимся с маршрутизацией. Спроектируем слой абстракции: контроллеры. Научимся формировать и обрабатывать запросы к API. Познакомимся с дополнительным инструментом nodemon. Узнаем, как обрабатывать ошибки.
Обработка запросов клиента.
Express.js.
И вновь MVC.
Свернуть / Развернуть
Практика
Маршрутизация.
Перезапуск приложения.
Обработка ошибок.
Контроллеры.
Раздел 7 Middleware. Валидация. Загрузка файлов
Продолжим знакомиться с Express.js и разберёмся с концепцией middleware. Узнаем, что это такое, и какие задачи удобно решать с помощью middleware. Затем спроектируем дополнительную абстракцию и напишем несколько собственных middleware.
После этого плавно перейдём к вопросу валидации данных — узнаем, почему важно проверять данные от клиентов, и организуем проверку входных данных в проекте. На практике познакомимся инструментами для валидации joi и class-validator.
После этого перейдём к загрузке файлов. Клиенты могут передавать не только текстовые данные, но и целые файлы. Узнаем, как их принимать на стороне сервера, сохранять и возвращать клиентам. На практике реализуем загрузку аватарок пользователей.
Middleware.
Зачем и как валидировать данные.
Загрузка файлов.
Свернуть / Развернуть
Практика
Middleware для валидации данных.
class-validator для валидации.
Загрузка файлов с помощью multer.
Middleware static.
Раздел 8 Ограничение доступа. Авторизация
Не все ресурсы должны быть доступны анонимным клиентам, поэтому разберёмся, как ограничить доступ к определённым ресурсам. Узнаем, как ограничить доступ к определённым маршрутам в Express.js. Разберёмся, чем авторизация отличается от аутентификации. Познакомимся с JWT (JSON Web Tokens) и научимся применять их на практике. Попрактикуемся в создании приватных маршрутов и реализуем сценарий «Вход в закрытую часть приложения».
Авторизация и аутентификация.
Сессии.
JSON Web Tokens.
Свернуть / Развернуть
Практика
Приватные маршруты.
JWT.
jose.
Раздел 9 Бэкенд и фронтенд
Узнаем, как подружить бэкенд и фронтенд. Научимся переиспользовать DTO на стороне фронтенда. Вспомним про паттерн «Адаптер». Познакомимся с CORS и узнаем, какие он решает задачи. Отрефакторим обработку ошибок: посмотрим, как оформлять ошибки для людей и машин.
DTO и фронтенд.
CORS.
Свернуть / Развернуть
Практика
CORS.
Рефакторинг: разделение ошибок.
Раздел 10 Финал
Подведём итоги курса. Обсудим дальнейший план изучения Node.js.