Aquí está mi forma simple:
<form id="loginformA" action="userlogin" method="post">
<div>
<label for="email">Email: </label>
<input type="text" id="email" name="email"></input>
</div>
<input type="submit" value="Submit"></input>
</form>
Aquí está mi código Express.js /Node.js:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
Lo intenté sReq.query.email
o sReq.query['email']
o sReq.params['email']
, etc. Ninguno de ellos funciona. Todos regresan undefined
.
Cuando cambio a obtener una llamada, funciona, así que ... ¿alguna idea?
javascript
node.js
post
express
murvinlai
fuente
fuente
bodyParser()
respuestas aquí también deben leer la respuesta de @SeanLynch a continuaciónRespuestas:
Las cosas han cambiado una vez más a partir de Express 4.16.0 , ahora puede usar
express.json()
yexpress.urlencoded()
al igual que en Express 3.0 .Esto fue diferente a partir de Express 4.0 a 4.15 :
y entonces:
El resto es como en Express 3.0 :
En primer lugar, debe agregar algún middleware para analizar los datos de publicación del cuerpo.
Agregue una o ambas de las siguientes líneas de código:
Luego, en su controlador, use el
req.body
objeto:Tenga en cuenta que
express.bodyParser()
no se recomienda el uso de ....es equivalente a:
Existen problemas de seguridad
express.multipart()
, por lo que es mejor agregar explícitamente soporte para los tipos de codificación específicos que necesita. Si necesita una codificación multiparte (por ejemplo, para admitir la carga de archivos), debería leer esto .fuente
content-type
encabezado configurado, por ejemplo:curl -d '{"good_food":["pizza"]}' -H 'content-type:application/json' "http://www.example.com/your_endpoint"
bodyParser
extrae datos JSON, codificados en URL y multiparte en elreq.body
objeto.app.use(require('body-parser').json())
línea es suficiente. Y luego puede leer los datos json del objeto del cuerpo de su solicitud, es decirreq.body
, desde una definición de ruta.Problema de seguridad con express.bodyParser ()
Mientras que todas las otras respuestas recomiendan actualmente utilizando el
express.bodyParser()
middleware, esto es en realidad una envoltura alrededor de laexpress.json()
,express.urlencoded()
yexpress.multipart()
middleware ( http://expressjs.com/api.html#bodyParser ). Elexpress.urlencoded()
middleware realiza el análisis de los cuerpos de solicitud de formulario y es todo lo que necesita para exponer sus datos de formularioreq.body
objeto.Debido a una preocupación de seguridad sobre cómo
express.multipart()
/connect.multipart()
crea archivos temporales para todos los archivos cargados (y no se recolectan basura), ahora se recomienda no usar elexpress.bodyParser()
contenedor sino usar solo los middlewares que necesita.Nota:
connect.bodyParser()
pronto se actualizará para incluir solourlencoded
yjson
cuando se publique Connect 3.0 (que Express se extiende).En resumen, en lugar de ...
...Deberías usar
y si necesita manejar formularios de varias partes (cargas de archivos), use una biblioteca de terceros o middleware como multiparte, busboy, dicer, etc.
fuente
multipart()
como parte de élbodyParser()
,bodyParser()
vuelve a ser "seguro", pero deberá habilitar explícitamente el soporte multiparte utilizando una biblioteca de terceros.Nota : esta respuesta es para Express 2. Vea aquí para Express 3.
Si está utilizando connect / express, debe usar el middleware bodyParser : se describe en la guía Expressjs .
Aquí está la versión original de solo conexión:
Tanto la cadena de consulta como el cuerpo se analizan utilizando el manejo de parámetros de estilo Rails (
qs
) en lugar de la biblioteca de bajo nivelquerystring
. Con el fin de analizar los parámetros repetidos conqs
, el parámetro debe tener paréntesis:name[]=val1&name[]=val2
. También es compatible con mapas anidados. Además de analizar los envíos de formularios HTML, bodyParser puede analizar las solicitudes JSON automáticamente.Editar : leí en express.js y modifiqué mi respuesta para que sea más natural para los usuarios de Express.
fuente
Esto lo hará si desea crear la consulta publicada sin middleware:
Eso enviará esto al navegador
Sin embargo, probablemente sea mejor usar middleware para no tener que escribir esto una y otra vez en cada ruta.
fuente
Nota para los usuarios de Express 4:
Si intenta
app.use(express.bodyParser());
ingresar a su aplicación, recibirá el siguiente error cuando intente iniciar su servidor Express:Tendrá que instalar el paquete por
body-parser
separado de npm , luego usar algo como lo siguiente (ejemplo tomado de la página de GitHub ):fuente
Dada alguna forma:
Usando express
Salida:
fuente
Backend:
Interfaz:
fuente
Luego, para
app.post
solicitarlo, puede obtener valores de publicación a través dereq.body.{post request variable}
.fuente
Actualización para Express 4.4.1
El middleware de lo siguiente se elimina de Express.
Cuando usa el middleware directamente como lo hizo en express 3.0. Recibirá el siguiente error:
Para utilizar esos middleware, ahora necesita hacer npm para cada middleware por separado.
Como bodyParser está marcado como obsoleto, recomiendo la siguiente forma de usar json, urlencode y analizador multiparte como formidable, connect-multiparty. (El middleware multiparte también está en desuso).
También recuerde, solo definiendo urlencode + json, los datos del formulario no se analizarán y req.body estará indefinido. Debe definir un middleware para manejar la solicitud multiparte.
fuente
Para Express 4.1 y superior
Como la mayoría de las respuestas se utilizan para Express, bodyParser, connect; donde multiparte está en desuso. Hay una forma segura de enviar fácilmente objetos de varias partes posteriores.
Multer se puede usar como reemplazo de connect.multipart ().
Para instalar el paquete
Cárgalo en tu aplicación:
Y luego, agréguelo en la pila de middleware junto con el otro middleware de análisis de formularios.
connect.json () maneja la aplicación / json
connect.urlencoded () maneja la aplicación / x-www-form-urlencoded
multer () maneja datos multiparte / formulario
fuente
Estaba buscando este problema exacto. Seguía todos los consejos anteriores, pero req.body aún devolvía un objeto vacío {}. En mi caso, era algo tan simple como que el html era incorrecto.
En el html de su formulario, asegúrese de usar el
'name'
atributo en sus etiquetas de entrada, no solo'id'
. De lo contrario, no se analiza nada.Mi error idiota es tu beneficio.
fuente
No deberías usar app.use (express.bodyParser ()) . BodyParser es una unión de json + urlencoded + mulitpart. No deberías usar esto porque la multiparte se eliminará en connect 3.0.
Para resolver eso, puedes hacer esto:
Es muy importante saber que app.use (app.router) debe usarse después de json y urlencoded, de lo contrario no funciona.
fuente
Solicitar streaming funcionó para mí
fuente
postdata.split("&")
sería cargar el módulo centralquerystring = require('querystring')
y luego analizarlopostdata
conquerystring.parse(postdata)
;Podría encontrar todos los parámetros usando el siguiente código para las solicitudes POST y GET .
fuente
Escrito en Express versión 4.16
Dentro de la función del enrutador puede usar la
req.body
propiedad para acceder a la variable de publicación. Por ejemplo, si esta fuera laPOST
ruta de su formulario, devolvería lo que ingresó:PS para aquellos que están familiarizados con PHP: para acceder a la
$_GET
variable de PHP que usamosreq.query
y para acceder a la$_POST
variable de PHP que usamosreq.body
en Node.js.fuente
fuente
Los parámetros de publicación se pueden recuperar de la siguiente manera:
fuente
param
se utiliza para solicitudes GET ... no POST y su ejemplo carece de detalles, muy confuso para los recién llegados. Y además de eso enrequest.param
realidad está en desuso, por lo que su ejemplo es incorrecto en muchos niveles.Está utilizando
req.query.post
un método incorrecto con el quereq.query.post
funcionamethod=get
,method=post
funciona con el analizador de cuerpo .Simplemente intente esto cambiando la publicación para obtener :
Y en código expreso use 'app.get'
fuente
Utilice el paquete express-fileupload :
fuente