Запропонувати правкуПокращити цю статтюДопрацюйте відповідь до «Що таке middleware в Express.js?». Ваші зміни проходять модерацію перед публікацією.Потрібне підтвердженняКонтентЩо ви змінюєте🇺🇸EN🇺🇦UAПереглядЗаголовок (UA)Коротка відповідь (UA)Middleware - функція `(req, res, next)`, яка виконується між отриманням запиту й відправкою відповіді: може читати чи змінювати `req`/`res`, перервати запит або передати керування далі викликом `next()`. **Ключове:** якщо middleware не викличе `next()`, ланцюжок обробки зупиниться - Express не дійде до наступного middleware чи маршруту; middleware для помилок завжди має 4 аргументи: `(err, req, res, next)`.Показується над повною відповіддю для швидкого нагадування.Відповідь (UA)Зображення## 1. Що таке middleware в Express.js > **Middleware (проміжне ПЗ)** - це **функція**, яка виконується **між отриманням запиту (Request)** і **відправкою відповіді (Response)**. Кожен middleware може: 1. Читати чи змінювати об'єкт `req` (запит); 2. Читати чи змінювати об'єкт `res` (відповідь); 3. Перервати запит (наприклад, повернути помилку чи відповідь); 4. Передати керування далі - викликом функції `next()`. Це можна уявити так: ```javascript Client → [Middleware 1] → [Middleware 2] → [Route Handler] → Response ``` ## 2. Приклад простого middleware ```javascript const express = require('express'); const app = express(); // Middleware: логування всіх запитів app.use((req, res, next) => { console.log(`${req.method} ${req.url}`); next(); // передаємо керування наступному обробнику }); app.get('/', (req, res) => { res.send('Головна сторінка'); }); app.listen(3000, () => console.log('Сервер запущено')); ``` При кожному запиті: ```javascript GET / → Логується метод і URL → Надсилається відповідь ``` ## 3. Як виглядає структура middleware ```javascript function middleware(req, res, next) { // 1. Щось робимо із запитом // 2. Можемо модифікувати res (наприклад, додати заголовок) // 3. Обов'язково викликати next(), якщо хочемо продовжити ланцюжок } ``` Якщо **не викликати** `next()`, ланцюжок **обірветься** - Express не дійде до наступного middleware чи маршруту. ## 4. Види middleware в Express | Тип | Де використовується | Приклад | |---|---|---| | Application-level | Застосовується до всього застосунку | `app.use(...)` | | Router-level | Лише для конкретного маршрутизатора | `router.use(...)` | | Built-in | Вбудовані в Express (`express.json()`, `express.static()`) | | | Third-party | Сторонні пакети (наприклад, `morgan`, `cors`, `helmet`) | | | Error-handling | Обробляють помилки, мають **4 аргументи** (`err, req, res, next`) | | ## 5. Приклад кількох middleware ```javascript app.use(express.json()); // вбудований middleware для парсингу JSON app.use((req, res, next) => { console.log('Middleware перший'); next(); }); app.use((req, res, next) => { console.log('Middleware другий'); next(); }); app.get('/', (req, res) => { res.send('Маршрут третій'); }); ``` Вивід при GET `/`: ```javascript Middleware перший Middleware другий Маршрут третій ``` ## 6. Middleware для обробки помилок > Middleware для помилок в Express **завжди має 4 аргументи**: > `(err, req, res, next)` ```javascript app.use((err, req, res, next) => { console.error('Помилка:', err.message); res.status(500).send('Щось пішло не так'); }); ``` Такий middleware буде викликаний, якщо десь у коді станеться помилка чи ти викличеш `next(err)`. ## 7. Приклад практичного використання middleware ```javascript // Перевірка токена function authMiddleware(req, res, next) { if (req.headers.authorization === 'secret123') { next(); // усе гаразд, продовжуємо } else { res.status(401).send('Доступ заборонено'); } } app.get('/private', authMiddleware, (req, res) => { res.send('Секретна інформація'); }); ``` Тепер `/private` доступний лише за наявності правильного заголовка. ## 8. Вбудовані middleware Express | Middleware | Призначення | |---|---| | `express.json()` | Парсить JSON-тіло запитів | | `express.urlencoded()` | Парсить дані з HTML-форм | | `express.static()` | Віддає статичні файли (HTML, CSS, JS, зображення) | ## 9. Популярні зовнішні middleware | Пакет | Призначення | |---|---| | morgan | Логування запитів | | cors | Дозвіл крос-доменних запитів | | helmet | Захист HTTP-заголовків | | express-session | Сесії користувачів | | body-parser (застарілий, тепер вбудований) | Парсинг тіла запиту | ## 10. Підсумок > **Middleware в Express.js** - це функції, які виконуються **в ланцюжку обробки HTTP-запиту**. > > Вони можуть: > > - змінювати `req` і `res`; > - виконувати перевірки, логування, парсинг тощо; > - передавати керування далі через `next()`; > - обробляти помилки. > > Завдяки middleware Express стає **гнучким**, **модульним** і **розширюваним** фреймворком.Для рев’юераПримітка для модератора (необов’язково)Бачить лише модератор. Прискорює рев’ю.