Request и Response
Тема дорожной карты · Node.js
В Node.js каждое входящее HTTP-взаимодействие представлено объектом запроса и объектом ответа, которые вместе составляют основу серверной веб-разработки. Во встроенном модуле http объект запроса (IncomingMessage) предоставляет заголовки, HTTP-метод, URL и читаемый поток для тела запроса, тогда как объект ответа (ServerResponse) содержит методы res.writeHead() и res.end() для отправки данных клиенту. Express.js расширяет эти объекты более богатым API — req.params, req.query, req.body и res.json() — что делает создание RESTful-сервисов Node.js на JavaScript значительно удобнее. Правильное чтение из запроса и запись в ответ — это фундаментальный контракт любого HTTP-обработчика, а ненадлежащая работа с этими объектами (например, незавершённый ответ) может привести к тому, что клиент будет ждать ответа бесконечно. Владение обработкой запросов и ответов в Node.js — это необходимый навык для всех, кто создаёт серверные API с Express.js или нативным модулем http.
Как это работает
Request и Response — самый широко используемый Node HTTP-фреймворк: минималистичный, middleware-based, route-based. Запрос проходит через стек middleware-функций; каждая зовёт next() для передачи управления. app.get("/path", handler) регистрирует роут; app.use(middleware) монтирует middleware. Современные альтернативы: Fastify (быстрее, schema-based, JSON-first), Koa (духовный преемник Express, async-native), Hono (edge-runtime ready), NestJS (opinionated, decorator-based).
Когда применять
Express — для legacy-сервисов и быстрых прототипов; его доки и middleware-экосистема непревзойдены. Fastify — для новых performance-чувствительных API (2-3x throughput, встроенная schema-валидация). NestJS — для больших командных проектов с пользой от конвенций. Всегда добавляйте helmet, rate-limit, лимит размера body — у Express нет безопасных дефолтов. Валидируйте input (zod, ajv) до любой записи в БД.
Типичные ошибки
Ловушки Request и Response: забытый response — запрос висит вечно (ставьте timeouts); express.json({limit: "100mb"}) (DoS-вектор); нет глобального error-handler (app.use((err, req, res, next) => ...)); не выставлен app.disable("x-powered-by") (fingerprinting); баги в порядке middleware (auth должен быть до handler). Прочтите Express security best practices один раз.