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
:
-
json
analiza los cuerpos deapplication/json
solicitudapplication/json
-
urlencoded
analizax-ww-form-urlencoded
cuerpos de solicitud - y
multipart
analiza 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.