Express.js req.body indefinido
Tengo esto como configuración de mi servidor Express.
app.use(app.router);
app.use(express.cookieParser());
app.use(express.session({ secret: "keyboard cat" }));
app.set('view engine', 'ejs');
app.set("view options", { layout: true });
//Handles post requests
app.use(express.bodyParser());
//Handles put requests
app.use(express.methodOverride());
Pero aún así, cuando pregunto req.body.something
en mis rutas, aparece un error que me indica eso body is undefined
. A continuación se muestra un ejemplo de una ruta que utiliza req.body
:
app.post('/admin', function(req, res){
console.log(req.body.name);
});
Leí que este problema es causado por la falta de app.use(express.bodyParser());
pero como puedes ver lo llamo antes que las rutas.
¿Cualquier pista?
ACTUALIZACIÓN julio 2020
express.bodyParser()
ya no está incluido como parte de Express. Debe instalarlo por separado antes de cargar:
npm i body-parser
// then in your app
var express = require('express')
var bodyParser = require('body-parser')
var app = express()
// create application/json parser
var jsonParser = bodyParser.json()
// create application/x-www-form-urlencoded parser
var urlencodedParser = bodyParser.urlencoded({ extended: false })
// POST /login gets urlencoded bodies
app.post('/login', urlencodedParser, function (req, res) {
res.send('welcome, ' + req.body.username)
})
// POST /api/users gets JSON bodies
app.post('/api/users', jsonParser, function (req, res) {
// create user in req.body
})
Ver aquí para más información
sigue el original
Debe asegurarse de definir todas las configuraciones ANTES de definir rutas. Si lo hace, podrá continuar usando express.bodyParser()
.
Un ejemplo es el siguiente:
var express = require('express'),
app = express(),
port = parseInt(process.env.PORT, 10) || 8080;
app.configure(function(){
app.use(express.bodyParser());
});
app.listen(port);
app.post("/someRoute", function(req, res) {
console.log(req.body);
res.send({ status: 'SUCCESS' });
});
Las últimas versiones de Express (4.x) han separado el middleware del marco central. Si necesita un analizador de cuerpo, debe instalarlo por separado.
npm install body-parser --save
y luego haz esto en tu código
var bodyParser = require('body-parser')
var app = express()
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
Express 4, tiene un analizador de cuerpo incorporado. No es necesario instalar un analizador de cuerpo separado. Así que a continuación funcionará:
export const app = express();
app.use(express.json());