Оглавление
Express
Минималистичный веб-фреймворк для Node.js: маршруты, промежуточные обработчики, шаблоны и REST API.
1.Начало работы
- Что такое ExpressЗачем нужен Express и чем он удобнее голого модуля node:http.
- Установка и первый серверСоздание проекта, установка Express, запуск сервера через app.listen и node --watch.
- Структура проектаКак разложить код приложения на Express по папкам: app.js, server.js, routes, controllers, views и public.
2.Маршруты, запрос и ответ
- Маршруты и HTTP-методыКак связать адрес и HTTP-метод с функцией-обработчиком в Express.
- Параметры маршрута и строка запросаКак получить часть адреса через req.params и значения после знака вопроса через req.query.
- Объект запросаЧто лежит в req: метод, адрес, параметры, заголовки, тело запроса и IP-адрес клиента.
- Объект ответаКак ответить клиенту: res.send, res.json, res.status, res.redirect и другие методы ответа.
- Router и маршруты в отдельных файлахКак вынести маршруты из app.js в файлы routes/ с помощью express.Router и обработчики — в контроллеры.
3.Middleware
- Что такое middlewareПромежуточные обработчики в Express: как написать свой, что делает next() и почему важен порядок.
- Встроенные middlewareexpress.json и express.urlencoded: как Express читает тело запроса с JSON и данными HTML-форм.
- Статические файлыКак раздавать CSS, картинки и скрипты из папки public через express.static.
- Страница 404 и обработка ошибокКак показать свою страницу «не найдено» и перехватить ошибки в одном обработчике ошибок.
- Асинхронные обработчикиКак писать обработчики с async/await и как Express 5 сам передаёт их ошибки в обработчик ошибок.
4.Страницы и формы
- Шаблоны EJSКак собирать HTML-страницы из шаблонов EJS: настройка, res.render, вывод данных, условия и циклы.
- Общие части страницКак вынести шапку и подвал сайта в отдельные шаблоны и подключать их через include.
- Формы и перенаправление после POSTФорма добавления статьи: показ формы, чтение данных из req.body и перенаправление после отправки.
- Проверка данных формыРучная проверка полей и проверка по схеме с библиотекой Zod, вывод ошибок рядом с формой.
- Загрузка файловКак принять картинку из формы с помощью multer: настройка хранилища, ограничения размера и типа файла.
5.Данные и пользователи
- База данных SQLiteКак хранить статьи и комментарии в SQLite через better-sqlite3: подключение, таблицы, модель и запросы.
- Сессии и flash-сообщенияКак хранить данные посетителя между запросами через express-session и показывать одноразовые сообщения.
- Вход и выход пользователейРегистрация с хешированием пароля через bcrypt, вход и выход через сессию, защита маршрутов.
6.JSON API
- REST API для статейJSON API блога на Express: чтение, создание, изменение и удаление статей по правилам REST.
- Авторизация API через JWTКак выдать клиенту токен JWT при входе и проверять его в middleware для защищённых адресов API.
- CORSПочему браузер блокирует запросы к API с другого сайта и как разрешить их пакетом cors.
7.К запуску на сервере
- Настройки и переменные окруженияКак хранить порт, секреты и адрес базы в файле .env и читать их через process.env.
- Журнал запросов с morganКак записывать каждый запрос к серверу с помощью morgan: форматы, запись в файл и журнал ошибок.
- Основы безопасностиЗащитные заголовки helmet, ограничение частоты запросов, проверка входных данных и безопасные cookie.
- Тестирование с supertestАвтотесты для приложения на Express: встроенный node:test и supertest для запросов без запуска сервера.
- Развёртывание на сервереЗапуск блога на Express на сервере: режим production, менеджер процессов pm2 и обратный прокси nginx.