node.js - parser - node express request size
Node.js(con Express y bodyParser): no puede obtener datos de formulario de la solicitud posterior (3)
Parece que no puedo recuperar los datos de formulario de una solicitud de envío enviada a mi servidor Node.js. He puesto debajo el código del servidor y la solicitud de envío (enviado usando cartero en Chrome):
Publicar solicitud
POST /api/login HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Content-Disposition: form-data; name="userName"
jem
----WebKitFormBoundaryE19zNvXGzXaLvS5C
Código del servidor NodeJS
var express = require(''express''); // call express
var app = express(); // define our app using express
var bodyParser = require(''body-parser'');
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(bodyParser());
app.all(''/*'', function(req, res, next) {
res.header(''Access-Control-Allow-Origin'', ''*'');
res.header(''Access-Control-Allow-Headers'', ''Content-Type,accept,access_token,X-Requested-With'');
next();
});
var port = process.env.PORT || 8080; // set our port
var router = express.Router(); // get an instance of the express Router
router.get(''/'', function(req, res) {
res.json({ message: ''I am groot!'' });
});
// Login
router.route(''/login'')
.post(function(req, res){
console.log(''Auth request recieved'');
// Get the user name
var user = req.body.userName;
var aToken = getToken(user);
res.json({
''token'':''a_token''
});
});
app.use(''/api'', router);
app.listen(port);
El método de inicio de sesión intenta obtener el req.body.userName
, sin embargo, req.body
siempre está vacío. He visto otros casos en SO que describen este tipo de comportamiento, pero ninguna de las respuestas relacionadas se aplicó aquí.
Gracias por ayudarnos
Asegúrese de poner en este orden: bodyParser.json () primero. app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true }));
En general, una aplicación Express necesita especificar el middleware de analizador de cuerpo apropiado para que req.body
contenga el cuerpo.
[Editado]
Si requirió el análisis de datos de formulario codificados en url (no multiparte), así como JSON, intente agregar:
// Put this statement near the top of your module var bodyParser = require(''body-parser''); // Put these statements before you define any routes. app.use(bodyParser.urlencoded()); app.use(bodyParser.json());
Primero, deberá agregar body-parser a la propiedad de
dependencies
de supackage.json
y luego realizar unanpm update
.Para manejar datos de formularios de varias partes, el analizador de cuerpo
bodyParser.urlencoded()
no funcionará. Vea los módulos sugeridos aquí para analizar los cuerpos de varias partes.
Para manejar la solicitud de datos múltiples / formulario que admite la carga de archivos, necesita usar el módulo multer. enlace de npm para middleware multer