Що таке middleware в Express.js?
1. Що таке middleware в Express.js
Middleware (проміжне ПЗ) - це функція, яка виконується між отриманням запиту (Request) і відправкою відповіді (Response).
Кожен middleware може:
- Читати чи змінювати об'єкт
req(запит); - Читати чи змінювати об'єкт
res(відповідь); - Перервати запит (наприклад, повернути помилку чи відповідь);
- Передати керування далі - викликом функції
next().
Це можна уявити так:
Client → [Middleware 1] → [Middleware 2] → [Route Handler] → Response2. Приклад простого middleware
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('Сервер запущено'));При кожному запиті:
GET /
→ Логується метод і URL
→ Надсилається відповідь3. Як виглядає структура middleware
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
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 /:
Middleware перший
Middleware другий
Маршрут третій6. Middleware для обробки помилок
Middleware для помилок в Express завжди має 4 аргументи:
(err, req, res, next)
app.use((err, req, res, next) => {
console.error('Помилка:', err.message);
res.status(500).send('Щось пішло не так');
});Такий middleware буде викликаний, якщо десь у коді станеться помилка чи ти викличеш next(err).
7. Приклад практичного використання middleware
// Перевірка токена
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 стає гнучким, модульним і розширюваним фреймворком.
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.