req.body no está definido a pesar de que funcionó hace un par de días, incluso intenté usar el analizador de cuerpo ahora depreciado y nada, este es mi código:
JS:
var express = require("express"); var router = express(); require("dotenv").config(); var mongoose = require("mongoose"); router.use(express.json()); router.use(express.urlencoded({ extended: true })); router.get("/upload-new", function (req, res) { res.render("forum2"); }); router.post("/upload-new", function (req, res) { console.log(req.body.name); });EJS:
<body> <form action="/upload-new" method="post" enctype="multipart/form-data"> <input type="text" name="name" /> <button type="submit">submit</button> </form> </body>JSON:
{ "name": "myapp", "version": "0.1.0", "private": true, "scripts": { "start": "nodemon ./bin/www" }, "dependencies": { "bootstrap": "^5.2.0-beta1", "connect": "^3.7.0", "connect-mongo": "^4.6.0", "cookie-parser": "~1.4.4", "cors": "^2.8.5", "debug": "~2.6.9", "dotenv": "^16.0.1", "ejs": "^3.1.8", "express": "^4.18.1", "express-session": "^1.17.3", "fs": "^0.0.1-security", "http-errors": "~1.6.3", "mongodb": "^4.6.0", "mongoose": "^6.4.1", "morgan": "^1.10.0", "nodemon": "^2.0.18", "package-json": "^8.1.0", "path": "^0.12.7", "url": "^0.11.0" } }He estado luchando mucho con este problema durante los últimos días, cualquier ayuda sería apreciada .
Su formulario HTML está configurado para "multipart/form-data" , pero no tiene un middleware en su servidor para leer y analizar ese tipo de contenido, por lo que req.body permanece undefined ya que ningún middleware coincide con el tipo de contenido.
Para un formulario tan simple, puede usar application/x-www-form-urlencoded como el tipo de contenido (que es el tipo de contenido predeterminado cuando no se especifica ninguno) y su app.use(express.urlencoded()) lea y analice ese tipo de contenido y llenará req.body por usted.
Simplemente elimine el enctype en su formulario y se establecerá de forma predeterminada en application/x-www-form-urlencoded :
<body> <form action="/upload-new" method="post"> <input type="text" name="name" /> <button type="submit">submit</button> </form> </body>¿Intentó solicitar el punto final de API "/ cargar-nuevo" usando cartero u otros clientes http?