Skip to main content
Практика завдань

Як працює парсинг тіла в Express.js?

Парсинг тіла в Express.js

Коли клієнт надсилає дані (JSON, форма, файл), вони приходять як потік байтів у тілі запиту. Вбудовані парсери тіла Express читають і парсять ці дані, роблячи їх доступними на req.body.


Вбудовані парсери (Express 4.16+)

js
const express = require('express'); const app = express(); // Парсинг JSON тіл: { "name": "Alice" } app.use(express.json()); // Парсинг URL-кодованих форм: name=Alice&age=30 app.use(express.urlencoded({ extended: true }));

Не потрібно додаткових пакетів — ці функції вбудовані в Express 4.16+.


express.json()

Парсить запити з Content-Type: application/json.

js
app.use(express.json({ limit: '10mb' })); // збільшити ліміт розміру app.post('/users', (req, res) => { console.log(req.body); // { name: 'Alice', email: 'alice@example.com' } res.status(201).json(req.body); });

Клієнт повинен надіслати: заголовок Content-Type: application/json.


express.urlencoded()

Парсить HTML форми (Content-Type: application/x-www-form-urlencoded).

js
app.use(express.urlencoded({ extended: true })); // extended: true → використовує бібліотеку 'qs' (вкладені об'єкти) // extended: false → використовує 'querystring' (тільки плоскі) app.post('/login', (req, res) => { const { username, password } = req.body; // ... });

Сирі та текстові парсери

js
// Парсинг сирого бінарного тіла app.use(express.raw({ type: 'application/octet-stream' })); // Парсинг простого текстового тіла app.use(express.text({ type: 'text/plain' }));

Завантаження файлів з Multer

Для multipart/form-data (завантаження файлів) використовуйте пакет multer:

bash
npm install multer
js
const multer = require('multer'); const storage = multer.diskStorage({ destination: 'uploads/', filename: (req, file, cb) => { cb(null, Date.now() + '-' + file.originalname); } }); const upload = multer({ storage, limits: { fileSize: 5 * 1024 * 1024 } }); // 5MB app.post('/upload', upload.single('avatar'), (req, res) => { console.log(req.file); // інформація про завантажений файл console.log(req.body); // інші поля форми res.json({ filename: req.file.filename }); }); // Кілька файлів app.post('/photos', upload.array('photos', 5), (req, res) => { console.log(req.files); // масив файлів });

Парсинг, специфічний для маршрутів

Застосовуйте парсери лише до певних маршрутів:

js
// Парсити JSON лише для API маршрутів app.use('/api', express.json()); // Різні ліміти для кожного маршруту app.post('/webhook', express.raw({ type: 'application/json' }), // сирий для перевірки вебхука Stripe handleWebhook );

Загальні помилки

js
// ❌ Забули додати парсер тіла app.post('/users', (req, res) => { console.log(req.body); // undefined! }); // ✅ Додати ПЕРЕД визначеннями маршрутів app.use(express.json()); app.post('/users', (req, res) => { console.log(req.body); // { name: 'Alice' } });

Резюме

Використовуйте express.json() для API кінцевих точок і express.urlencoded() для HTML форм. Додавайте ці проміжні програми на початку вашого додатку, перед визначеннями маршрутів. Для завантаження файлів використовуйте пакет multer.

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

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

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

Дочитали статтю?
Практика завдань