req parser node example body node.js express

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 de application/json solicitud application/json
  • urlencoded analiza x-ww-form-urlencoded cuerpos de solicitud
  • y multipart analiza los cuerpos de solicitud multipart/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.