Оглавление
Fastify
Быстрый веб-фреймворк для Node.js: маршруты, схемы проверки, плагины и хуки.
1.Начало работы
- Что такое FastifyЗачем нужен фреймворк Fastify, почему он быстрый и чем отличается от Express.
- Установка и первый серверСоздание проекта, установка Fastify, функция fastify(), запуск через listen и встроенный логгер.
- Структура проектаЗачем разделять app.js и server.js и где хранить маршруты и плагины.
2.Маршруты и ответы
- Маршруты и HTTP-методыКак объявить маршруты GET, POST, PUT и DELETE, полная форма app.route и префиксы.
- Параметры, query и тело запросаКак прочитать параметры маршрута, строку запроса и JSON из тела запроса через объект request.
- Ответы: replyКак задать код ответа и заголовки, отправить ответ через reply.send и сделать перенаправление.
3.Схемы
4.Плагины и хуки
- Плагины и инкапсуляцияЧто такое плагин Fastify, как подключить его через register, передать опции и как работает инкапсуляция.
- fastify-plugin и декораторыКак добавить в приложение общий объект через decorate, свойство запроса через decorateRequest и сделать его видимым всем плагинам.
- ХукиКак выполнить код на разных этапах запроса: onRequest, preHandler, onSend, onResponse и onClose.
- Обработка ошибокКак бросать HTTP-ошибки, использовать httpErrors из @fastify/sensible и настроить setErrorHandler и setNotFoundHandler.
- Логирование с PinoУровни логов, request.log, читаемый вывод через pino-pretty и скрытие секретов в логах.
5.Данные
- Настройки и переменные окруженияКак хранить порт, путь к базе и секреты в файле .env, загрузить их через --env-file и проверить плагином @fastify/env.
- Подключение базы данныхКак подключить SQLite через better-sqlite3 в виде плагина Fastify, создать таблицы и закрыть соединение при остановке.
- CRUD API для статейПолный набор маршрутов для статей блога: список, одна статья, создание, изменение и удаление со схемами и базой SQLite.
6.Защита и файлы
- Авторизация через JWTКак выдавать токен при входе с помощью @fastify/jwt и закрыть маршруты изменения статей от посторонних.
- CORSЧто такое CORS, почему браузер блокирует запросы к API с другого адреса и как разрешить их через @fastify/cors.
- Заголовки безопасности и ограничение запросовКак добавить защитные заголовки через @fastify/helmet и ограничить число запросов через @fastify/rate-limit.
- Статические файлыКак отдавать HTML, CSS, картинки и другие готовые файлы через @fastify/static.
- Загрузка файловКак принять файл от клиента через @fastify/multipart, сохранить его на диск и отдать по ссылке.
7.TypeScript, тесты и запуск
- TypeScript и FastifyКак запустить Fastify на TypeScript, типизировать параметры маршрута, получить типы из схемы через type provider и описать декораторы.
- Тестирование: inject и node:testКак проверять маршруты Fastify без запуска сервера через app.inject() и встроенный в Node.js модуль node:test.
- Запуск на сервереКак подготовить Fastify к работе на сервере: адрес 0.0.0.0, менеджер процессов PM2 и корректная остановка.