¿Por qué el código genera un req.body vacío?
const express = require("express"); const app = express(); app.use(express.urlencoded()); app.get("/", (req, res, next) => { res.send(`<script> fetch("/push", { body: "someText", headers: { "Content-Type": "text/html; charset=UTF-8", }, method: "POST", }).then((data) => console.log(data)); </script>`); }); app.post("/push", function (req, res, next) { console.log(req.body); //empty here //{} res.send(req.body); }); app.listen(3000);Su declaración de fetch realiza una solicitud POST con Content-Type: text/html , lo cual es muy inusual. express.urlencoded() no llena req.body para este tipo de contenido, solo está diseñado para Content-Type: application/x-www-form-urlencoded .
Puede analizar contenido textual arbitrario con código como este:
var body = ""; req.on('data', function(chunk) { body += chunk.toString(); }) .on('end', function() { res.send(body); });Simplemente agregue express.urlencoded({ extended: true }) también use express.js
const express = require("express"); const app = express(); app.use(express.urlencoded({ extended: true })); app.use(express.json()) app.get("/", (req, res, next) => { res.send(`<script> fetch("/push", { body: "someText", headers: { "Content-Type": "text/html; charset=UTF-8", }, method: "POST", }).then((data) => console.log(data)); </script>`); }); app.post("/push", function (req, res, next) { console.log(req.body); res.send(req.body); }); app.listen(3000);