parser - Node.js Express express.json y express.urlencoded con formulario enviado
npm install express (1)
bodyParser es, de hecho, la composición de tres middlewares (consulte la documentation y el código fuente relevante ): json , urlencoded y multipart :
-
jsonanaliza los cuerpos deapplication/jsonsolicitudapplication/json -
urlencodedanalizax-ww-form-urlencodedcuerpos de solicitud - y
multipartanaliza los cuerpos de solicitudmultipart/form-data, que es lo que le interesa.
Si solo especifica middlewares json y urlencoded , ningún middleware analizará los datos del formulario, por req.body que no se definirá req.body . Luego debe agregar un middleware que sea capaz de analizar datos de formularios como formidable, busboy o multipartidario (como se indica en la documentación de connect ).
Aquí hay un ejemplo, usando multiparty :
var multipart = require(''connect-multiparty'');
var multipartMiddleware = multipart();
app.use(''/url/that/accepts/form-data'', multipartMiddleware);
app.post(''/url/that/accepts/form-data'', function(req, resp) {
console.log(req.body, req.files);
});
No olvide que al usar tales middlewares usted permite que cualquier persona cargue archivos a su servidor: es su responsabilidad manejar (y eliminar) esos archivos.
Express (o Connect) bodyParser middleware está marcado en desuso y se recomienda a los usuarios usar en su lugar:
app.use(connect.urlencoded())
app.use(connect.json())
Sin embargo, cuando ejecuto el ejemplo de Node.js en Acción , uso curl para completar el formulario como lo sugiere el libro:
curl -F entry[title]=''Ho ho ho'' -F entry[body]=''santa loves you'' http://abc:[email protected]:3000/api/entry
No funciona req.body no está definido. ¿Me estoy perdiendo de algo? Funciona bien con bodyParser.
EDITAR: SOLUCIÓN a partir de Express 4
Analiza a json de esta manera:
var bodyParser = require(''body-parser'');
...
app.use(bodyParser.json());
Analiza el cuerpo urlencodificado de esta manera:
app.use(bodyParser.urlencoded({extended: true}));
Entonces no hay ninguna advertencia de desprecio. El extendido: verdadero (predeterminado) usa el módulo qs y falso usa el módulo de cadena de consulta para analizar el cuerpo.
No use app.use(bodyParser()) , ese uso ahora está en desuso.