Skip to main content

Що таке middleware в Express.js?

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 стає гнучким, модульним і розширюваним фреймворком.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.