Ответ
Да, тело (body) HTTP-ответа — это стандартная часть, предназначенная для передачи данных клиенту: JSON, HTML, XML, файлы и т.д. В Node.js, при работе с нативным модулем http, тело ответа формируется с помощью методов response.write() и завершается response.end().
Базовый пример с модулем http:
const http = require('http');
const server = http.createServer((req, res) => {
// Устанавливаем заголовки
res.writeHead(200, { 'Content-Type': 'application/json' });
// Записываем тело ответа (body) в формате JSON
const responseBody = JSON.stringify({ status: 'success', data: { id: 1 } });
res.end(responseBody);
});
server.listen(3000);
Ключевые моменты:
- Заголовки (
writeHead) должны быть установлены до записи тела. - Метод
res.end()сигнализирует о завершении формирования ответа. Любые данные, переданные в него, также записываются в тело. - Для потоковой передачи больших данных (например, видеофайла) можно использовать
res.write()несколько раз передres.end().
Пример потоковой отправки:
const fs = require('fs');
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('Starting data transfer...n');
// Симулируем отправку чанков
for (let i = 0; i < 5; i++) {
res.write(`Chunk ${i}n`);
}
res.end('Transfer complete.');
});
В современных фреймворках (Express, Fastify, Koa) тело ответа формируется проще, например, в Express: res.json({ message: 'Hello' }) или res.send('<html>...</html>').