Що таке об'єкти 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
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.