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

Що таке об'єкти req та res в Express.js?

req та res в Express.js

Кожен обробник маршруту Express отримує два ключові об'єкти: req (запит) та res (відповідь). Вони є розширеними версіями вбудованих http.IncomingMessage та http.ServerResponse у Node.js.


Об'єкт Запиту (req)

req містить всю інформацію про вхідний HTTP запит.

URL та Маршрутизація

js
// Маршрут: GET /api/users/:id?include=posts app.get('/api/users/:id', (req, res) => { req.params.id // '42' — параметр URL req.query.include // 'posts' — рядок запиту req.path // '/api/users/42' req.originalUrl // '/api/users/42?include=posts' req.method // 'GET' req.hostname // 'example.com' req.protocol // 'https' req.secure // true (якщо HTTPS) req.ip // '192.168.1.1' });

Тіло Запиту

js
app.use(express.json()); // активує req.body для JSON app.use(express.urlencoded()); // активує req.body для даних форми app.post('/users', (req, res) => { req.body.name // з JSON або тіла форми req.body.email });

Заголовки та Куки

js
req.headers // всі заголовки (ключі в нижньому регістрі) req.headers['authorization'] // 'Bearer eyJ...' req.get('Content-Type') // допоміжний: отримати заголовок за назвою req.cookies.sessionId // вимагає middleware cookie-parser req.signedCookies.userId // підписані куки

Користувацькі Властивості (встановлені middleware)

js
// Middleware для авторизації встановлює req.user req.user // { id: 1, role: 'admin' } req.db // з'єднання з базою даних req.requestId // користувацький ідентифікатор запиту

Об'єкт Відповіді (res)

res використовується для відправки HTTP відповіді назад клієнту.

Відправка Відповідей

js
res.send('Hello') // текст/HTML, автоматичний Content-Type res.json({ data: 'value' }) // application/json res.sendFile('/path/to/file') // відправити файл res.download('/file.pdf') // викликати завантаження в браузері res.render('template', { data })// рендеринг шаблону res.status(404).send('Not Found')

Код Статусу

js
res.status(200).json(data) // OK res.status(201).json(data) // Created res.status(204).send() // No Content res.status(400).json({ error: 'Bad Request' }) res.status(401).json({ error: 'Unauthorized' }) res.status(403).json({ error: 'Forbidden' }) res.status(404).json({ error: 'Not Found' }) res.status(500).json({ error: 'Internal Server Error' })

Заголовки та Перенаправлення

js
res.set('X-Custom-Header', 'value') // встановити заголовок res.set({ 'X-A': '1', 'X-B': '2' }) // встановити кілька res.type('json') // встановити Content-Type res.redirect('/new-url') // 302 перенаправлення res.redirect(301, '/permanent') // постійне перенаправлення res.cookie('token', 'abc', { // встановити куку httpOnly: true, secure: true, maxAge: 86400000 }) res.clearCookie('token') // очистити куку

Ланцюгування

Більшість методів res повертають res, тому ви можете ланцюжити:

js
res .status(201) .set('X-Created-Id', String(user.id)) .json({ success: true, data: user });

res.locals

Передача даних з middleware до обробників маршрутів:

js
// Middleware app.use((req, res, next) => { res.locals.user = req.user; res.locals.requestId = crypto.randomUUID(); next(); }); // Обробник маршруту app.get('/profile', (req, res) => { res.render('profile', { user: res.locals.user }); });

Підсумок

req та res — це два стовпи кожного обробника Express. Опануйте їх властивості та методи — особливо req.params, req.query, req.body, res.json(), res.status() та res.redirect() — і ви зможете обробляти практично будь-яку HTTP взаємодію.

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

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

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

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