Voici ma forme 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>
Voici mon code Express.js /Node.js:
app.post('/userlogin', function(sReq, sRes){
var email = sReq.query.email.;
}
J'ai essayé sReq.query.email
ou sReq.query['email']
ou sReq.params['email']
, etc. Aucun d'entre eux ne fonctionne. Ils reviennent tous undefined
.
Lorsque je passe à un appel Get, cela fonctionne, alors .. une idée?
javascript
node.js
post
express
murvinlai
la source
la source
bodyParser()
réponses ici devraient également lire la réponse deRéponses:
Les choses ont changé une fois de plus à partir d' Express 4.16.0 , vous pouvez maintenant utiliser
express.json()
etexpress.urlencoded()
tout comme dans Express 3.0 .C'était différent à partir d' Express 4.0 à 4.15 :
et alors:
Le reste est comme dans Express 3.0 :
Tout d'abord, vous devez ajouter un middleware pour analyser les données de publication du corps.
Ajoutez une ou les deux lignes de code suivantes:
Ensuite, dans votre gestionnaire, utilisez l'
req.body
objet:Notez que l'utilisation de
express.bodyParser()
n'est pas recommandée....est équivalent à:
Des problèmes de sécurité existent avec
express.multipart()
, et il est donc préférable d'ajouter explicitement la prise en charge du ou des types d'encodage spécifiques dont vous avez besoin. Si vous avez besoin d'un codage en plusieurs parties (pour prendre en charge le téléchargement de fichiers par exemple), vous devez lire ceci .la source
content-type
tête est défini, par exemple:curl -d '{"good_food":["pizza"]}' -H 'content-type:application/json' "http://www.example.com/your_endpoint"
bodyParser
résume les données JSON, codées URL et multiparties dans l'req.body
objet.app.use(require('body-parser').json())
ligne est suffisante. Et puis, vous pouvez lire les données json de l'objet corps de votre demande, c'estreq.body
-à- dire à partir d'une définition d'itinéraire.Problème de sécurité avec express.bodyParser ()
Alors que toutes les autres réponses recommandent actuellement l' utilisation du
express.bodyParser()
middleware, c'est en fait une enveloppe autour de laexpress.json()
,express.urlencoded()
etexpress.multipart()
intergiciels ( http://expressjs.com/api.html#bodyParser ). L'analyse des corps de demande de formulaire est effectuée par leexpress.urlencoded()
middleware et est tout ce dont vous avez besoin pour exposer vos données de formulaire sur l'req.body
objet.En raison d'un problème de sécurité concernant la façon dont
express.multipart()
/connect.multipart()
crée des fichiers temporaires pour tous les fichiers téléchargés (et ne sont pas récupérés), il est maintenant recommandé de ne pas utiliser leexpress.bodyParser()
wrapper mais d'utiliser uniquement les middlewares dont vous avez besoin.Remarque:
connect.bodyParser()
sera bientôt mis à jour pour inclure uniquementurlencoded
etjson
lorsque Connect 3.0 sera publié (qu'Express étend).Donc en bref, au lieu de ...
...Tu devrais utiliser
et si / quand vous avez besoin de gérer des formulaires en plusieurs parties (téléchargements de fichiers), utilisez une bibliothèque ou un middleware tiers tel que multipartie, busboy, dicer, etc.
la source
multipart()
dansbodyParser()
, ilbodyParser()
redevient "sûr", mais vous devrez activer explicitement la prise en charge de plusieurs parties à l'aide d'une bibliothèque tierce.Remarque : cette réponse est pour Express 2. Voir ici pour Express 3.
Si vous utilisez connect / express, vous devez utiliser le middleware bodyParser : il est décrit dans le guide Expressjs .
Voici la version originale connectée uniquement:
La chaîne de requête et le corps sont analysés à l'aide de la gestion des paramètres de style Rails (
qs
) plutôt que de la bibliothèque de bas niveauquerystring
. Afin d'analyser les paramètres répétés avecqs
, le paramètre doit être muni de supports:name[]=val1&name[]=val2
. Il prend également en charge les cartes imbriquées. En plus d'analyser les soumissions de formulaires HTML, bodyParser peut analyser automatiquement les demandes JSON.Edit : J'ai lu sur express.js et modifié ma réponse pour être plus naturel pour les utilisateurs d'Express.
la source
Cela le fera si vous souhaitez créer la requête publiée sans middleware:
Cela enverra cela au navigateur
Il est probablement préférable d'utiliser un middleware afin de ne pas avoir à l'écrire encore et encore dans chaque itinéraire.
la source
Remarque pour les utilisateurs d'Express 4:
Si vous essayez de mettre
app.use(express.bodyParser());
dans votre application, vous obtiendrez l'erreur suivante lorsque vous essayez de démarrer votre serveur Express:Vous devrez installer le package
body-parser
séparément de npm , puis utiliser quelque chose comme ceci (exemple tiré de la page GitHub ):la source
Étant donné une certaine forme:
Utilisation express
Production:
la source
Backend:
L'extrémité avant:
la source
Ensuite, pour la
app.post
demande, vous pouvez obtenir des valeurs de publication viareq.body.{post request variable}
.la source
Mise à jour pour Express 4.4.1
Le middleware des éléments suivants est supprimé d'Express.
Lorsque vous utilisez le middleware directement comme vous l'avez fait dans express 3.0. Vous obtiendrez l'erreur suivante:
Afin d'utiliser ces middlewares, vous devez maintenant faire npm pour chaque middleware séparément.
Étant donné que bodyParser est marqué comme obsolète, je recommande donc la façon suivante d'utiliser json, urlencode et analyseur multipartie comme formidable, connect-multiparty. (Le middleware multipartie est également obsolète).
Souvenez-vous également qu'en définissant simplement urlencode + json, les données du formulaire ne seront pas analysées et req.body ne sera pas défini. Vous devez définir un middleware pour gérer la demande en plusieurs parties.
la source
Pour Express 4.1 et supérieur
Comme la plupart des réponses utilisent Express, bodyParser, connect; où multipart est déconseillé. Il existe un moyen sécurisé d'envoyer facilement des objets post-multiparties.
Multer peut être utilisé en remplacement de connect.multipart ().
Pour installer le package
Chargez-le dans votre application:
Et puis, ajoutez-le dans la pile du middleware avec l'autre middleware d'analyse de formulaire.
connect.json () gère l'application / json
connect.urlencoded () gère l'application / x-www-form-urlencoded
multer () gère les données multipart / form-data
la source
Je cherchais ce problème exact. Je suivais tous les conseils ci-dessus mais req.body renvoyait toujours un objet vide {}. Dans mon cas, c'était quelque chose d'aussi simple que le html étant incorrect.
Dans le html de votre formulaire, assurez-vous d'utiliser l'
'name'
attribut dans vos balises d'entrée, pas seulement'id'
. Sinon, rien n'est analysé.Mon erreur idiote est votre avantage.
la source
Vous ne devez pas utiliser app.use (express.bodyParser ()) . BodyParser est une union de json + urlencoded + mulitpart. Vous ne devriez pas utiliser ceci car le multipart sera supprimé dans connect 3.0.
Pour résoudre cela, vous pouvez procéder comme suit:
Il est très important de savoir que app.use (app.router) doit être utilisé après json et urlencodé, sinon cela ne fonctionne pas!
la source
La demande de streaming a fonctionné pour moi
la source
postdata.split("&")
serait de charger le module de basequerystring = require('querystring')
puis d'analyser votrepostdata
avecquerystring.parse(postdata)
;J'ai pu trouver tous les paramètres en utilisant le code suivant pour les requêtes POST et GET .
la source
Écrit à Express version 4.16
À l'intérieur de la fonction de routeur, vous pouvez utiliser la
req.body
propriété pour accéder à la variable de publication. Par exemple, s'il s'agissait de l'POST
itinéraire de votre formulaire, il renverrait ce que vous avez entré:PS pour ceux qui connaissent PHP: Afin d'accéder à la
$_GET
variable PHP que nous utilisonsreq.query
et d'accéder à la$_POST
variable PHP que nous utilisonsreq.body
dans Node.js.la source
la source
Les paramètres de publication peuvent être récupérés comme suit:
la source
param
est utilisé pour les requêtes GET .. pas POST et votre exemple manque de détails, très déroutant pour les nouveaux arrivants. Et en plus de celarequest.param
est en fait obsolète, donc votre exemple est erroné à tant de niveaux.Vous utilisez
req.query.post
avec une mauvaise méthodereq.query.post
fonctionne avecmethod=get
,method=post
fonctionne avec body-parser .Essayez simplement cela en changeant de poste pour obtenir :
Et dans le code express, utilisez 'app.get'
la source
Utilisez le package express-fileupload :
la source