Ответ
В POST-запросе данные (тело запроса) передаются в теле (body), а не в URL. Конкретное место и формат определяются заголовком Content-Type.
Основные способы в Node.js/Express:
-
application/x-www-form-urlencoded(стандартная форма HTML):// Данные: name=John&age=30 app.use(express.urlencoded({ extended: true })); // Middleware для парсинга app.post('/submit', (req, res) => { console.log(req.body.name); // 'John' console.log(req.body.age); // '30' }); -
application/json(наиболее распространен для API):// Данные: {"name":"John","age":30} app.use(express.json()); // Middleware для парсинга JSON app.post('/api/users', (req, res) => { const userData = req.body; // ... обработка }); -
multipart/form-data(для загрузки файлов):const multer = require('multer'); const upload = multer(); // Для полей формы app.post('/upload', upload.none(), (req, res) => { console.log(req.body); // Текстовые поля формы }); // Для файлов app.post('/upload-file', upload.single('avatar'), (req, res) => { console.log(req.file); // Информация о загруженном файле });
Важно: Для доступа к req.body в Express обязательно нужно подключить соответствующий middleware парсер (express.json(), express.urlencoded()). Без него req.body будет undefined.
Ответ 18+ 🔞
А, ну вот, опять про этот req.body! Чувак, это же классика, как не знать, где данные в POST-запросе прячутся. Они не в URL болтаются, как у гопников на лавочке, а в теле запроса (body) сидят, как сыр в мышеловке. А чтобы их оттуда выковырять, надо заголовок Content-Type посмотреть — он как инструкция, что за хуйню нам прислали.
Смотри, как это в Node.js с Express делается, главное — парсеры не забудь, а то нихуя не получится:
-
application/x-www-form-urlencoded— это как старые добрые HTML-формы, данные в строку слипшиеся.// Пришло: name=Ivan&drink=Vodka app.use(express.urlencoded({ extended: true })); // Вот этот парсер — твой лучший друг, без него нихуя! app.post('/submit', (req, res) => { console.log(req.body.name); // 'Ivan' console.log(req.body.drink); // 'Vodka' — вот и вся магия }); -
application/json— сейчас все API этим дышат, данные структурированные, красивые.// Прилетело: {"name":"Petr","iq":150} app.use(express.json()); // А это парсер для JSON, тоже обязателен, ёпта! app.post('/api/genius', (req, res) => { const data = req.body; // Всё, данные твои, делай что хошь // ... тут какая-нибудь хитрая логика }); -
multipart/form-data— это когда кроме текста ещё и файлы цепляют. Тут уже посложнее, обычноmulterв помощь.const multer = require('multer'); const upload = multer(); // Если файлов нет, а просто поля формы app.post('/upload', upload.none(), (req, res) => { console.log(req.body); // Смотри, все текстовые поля тут }); // А вот если с файлом app.post('/upload-avatar', upload.single('avatar'), (req, res) => { console.log(req.file); // А тут уже информация про файл, который прилетел console.log(req.body.name); // И про остальные поля тоже не забудь });
Запомни раз и навсегда, как «Отче наш»: без нужного middleware-парсера (express.json() или express.urlencoded()) твой req.body будет undefined, и ты будешь сидеть и чесать репу, думая, что всё сломалось. Просто подключи эту хуйню в начале, и волнение ебать — всё заработает.