Comment faire pour récupérer les paramètres de la requête POST?
Voici mon formulaire 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 Express.js/Node.js code:
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. Aucune de ces travaux. Ils retournent tous undefined
.
Lorsque je change à un appel, il fonctionne, donc .. une idée?
- SÉCURITÉ: tout le monde à l'aide de
bodyParser()
de réponses ici lire aussi @SeanLynch 's réponse ci-dessous - Utiliser le corps-parser module. Voici quelques usful exemples d'utilisation pour le corps-parser
Vous devez vous connecter pour publier un commentaire.
Les choses ont changé en commençant à nouveau Express 4.16.0, vous pouvez maintenant utiliser
express.json()
etexpress.urlencoded()
tout comme dans Express 3.0.C'était différentes de départ Express 4.0 à 4,15:
et puis:
Le reste, c'est comme dans Express 3.0:
Tout d'abord, vous devez ajouter quelques middleware pour analyser les données post du corps.
Ajouter une ou deux lignes de code suivantes:
Puis, dans votre gestionnaire, utilisez le
req.corps
objet:Noter que l'utilisation de
express.bodyParser()
n'est pas recommandé....est équivalent à:
Préoccupations relatives à la sécurité avec
express.multipart()
, et il est donc préférable d'ajouter explicitement le soutien pour le codage spécifique de type(s) dont vous avez besoin. Si vous avez besoin de plusieurs parties d'encodage (pour prendre en charge le téléchargement de fichiers par exemple), alors vous devriez lire ce.content-type
en-tête, par exemple:curl -d '{"good_food":["pizza"]}' -H 'content-type:application/json' "http://www.example.com/your_endpoint"
bodyParser
résumés JSON, URL-encodé et multipart données dans lereq.body
objet.content-type:application/json
vous devriez Poster JSON comme suit:{"a": 1}
. Les résultats suivants dans la variablea
n'étant pas disponible dansreq.body
->{a: 1}
"
citations, même si le JavaScript ne fonctionne pas.app.use(bodyParser.urlencoded({ extended: true }));
fonctionne sans erreurapp.use(require('body-parser').json())
ligne est suffisante. Et puis vous pouvez lire les données json à partir de votre demande, le corps de l'objet, c'est à direreq.body
, à partir d'une définition de la route.JSON.parse('{'+params.split('=') .join(':') .split('&') .join(',')+'}');
nécessaires pour être son propre middleware plutôt que quelque chose de Express.js juste hors de la boîte. Comment passer au crible maintenant des dizaines de dépendances à faire les choses les plus simples se produire de plus facile que de simplement en utilisant le protocole http.écouter?Problème de sécurité à l'aide de l'express.bodyParser()
Alors que toutes les autres réponses actuellement vous recommandons d'utiliser le
express.bodyParser()
middleware, c'est en fait un wrapper autour de laexpress.json()
,express.urlencoded()
, etexpress.multipart()
middlewares (http://expressjs.com/api.html#bodyParser). L'analyse du formulaire de demande d'organes est effectué par leexpress.urlencoded()
middleware et c'est tout ce que vous devez exposer vos données de formulaire surreq.body
objet.En raison d'un problème de sécurité avec comment
express.multipart()
/connect.multipart()
crée des fichiers temporaires de tous les fichiers téléchargés (et ne sont pas des ordures collectées), il est maintenant recommandé de ne pas utiliser leexpress.bodyParser()
wrapper mais au lieu d'utiliser seulement les middlewares vous avez besoin.Remarque:
connect.bodyParser()
sera bientôt mis à jour pour inclure uniquementurlencoded
etjson
lors de la connexion 3.0 (qui Expriment prolonge).Donc, en bref, au lieu de ...
...vous devez utiliser
et si/lorsque vous avez besoin pour gérer multipart formes (téléchargement de fichiers), l'utilisation d'un tiers de la bibliothèque ou middleware tels que le multipartisme, busboy, dicer, etc.
multipart()
dans le cadre debodyParser()
,bodyParser()
devient "safe", mais vous aurez besoin pour activer explicitement multipart charge l'utilisation d'une bibliothèque tierce.Note: cette réponse est pour Express 2. Voir ici Express 3.
Si vous utilisez la connexion/l'express, vous devez utiliser le bodyParser middleware: Il est décrit dans le Expressjs guide.
Voici l'original connecter version:
À la fois la chaîne de requête et le corps sont analysées à l'aide de Rails de style de gestion des paramètres (
qs
) plutôt que de la faible niveau derequête
de la bibliothèque. Pour analyser les répétée des paramètres avecqs
, le paramètre doit avoir des crochets:name[]=val1&name[]=val2
. Il prend également en charge imbriqués les cartes. En plus de l'analyse de formulaire HTML soumissions, le bodyParser peut parser JSON automatiquement les demandes.Modifier: j'ai lu sur express.js et modifié ma réponse à de plus naturel pour les utilisateurs de Express.
Cela fera si vous voulez construire la publication de la requête, sans middleware:
Qui envoie au navigateur
Il est probablement préférable d'utiliser un middleware bien que si vous n'avez pas à écrire ce cours et plus dans chaque itinéraire.
Note pour Exprimer 4 utilisateurs:
Si vous essayez de mettre
app.use(express.bodyParser());
dans votre application, vous obtiendrez le message d'erreur suivant lorsque vous essayez de démarrer votre Express server:Vous devrez installer le paquet
body-parser
séparément de mnp, puis utilisez quelque chose comme ce qui suit (exemple pris sur la page GitHub):Donné une certaine forme:
Express
De sortie:
Alors pour
app.post
demande, vous pouvez obtenir des valeurs post viareq.body.{post request variable}
.Mise à jour pour Exprimer 4.4.1
Middleware du suivant est retiré de l'Express.
Lorsque vous utilisez le middleware directement comme vous l'avez fait dans l'express 3.0. Vous obtiendrez l'erreur suivante:
Afin d'utiliser ces middleware, maintenant, vous devez faire mnp pour chaque middleware séparément.
Depuis bodyParser est marqué comme obsolète, donc je vous recommande de la manière suivante à l'aide de json, urlencode et multipart analyseur comme formidable, connectez-multipartite. (Multipart middleware est obsolète depuis bien).
Aussi souvenez-vous, à la définition de la fonction urlencode + json, les données du formulaire ne sera pas analysé et req.le corps ne sera pas défini. Vous avez besoin de définir un middleware de gérer la demande multiparties.
Backend:
Frontend:
Pour Exprimer 4.1 et au-dessus de
Que la plupart des réponses sont à l'aide d'Exprimer, bodyParser, connecter; où multipart est obsolète. Il est un moyen sécurisé pour envoyer des post multipart facilement des objets.
Multer peut être utilisé comme remplacement pour le connecter.multipart().
Pour installer le package
De le charger dans votre application:
Et ajoutez-le ensuite dans le middleware de la pile avec l'autre forme d'analyse de middleware.
connecter.json() poignées application/json
connecter.urlencoded() poignées application/x-www-form-urlencoded
multer() poignées multipart/form-data
Je cherchais exactement ce problème. J'ai suivi tous les conseils ci-dessus, mais req.le corps était encore de retour d'un objet vide {}. Dans mon cas, c'était quelque chose d'aussi simple que le html est incorrect.
Dans votre formulaire html, assurez-vous d'utiliser le
'name'
attribut dans la balise input, pas seulement'id'
. Sinon, rien n'est analysée.Mon idiot erreur est de votre prestation.
Vous shoudn pas utiliser app.utilisation(express.bodyParser()). BodyParser est une union de json + urlencoded + mulitpart. Vous shoudn pas utiliser ce parce que plusieurs parties seront supprimés dans connect 3.0.
Pour résoudre cela, vous pouvez faire ceci:
Il est très important de savoir que app.utilisation(app.routeur) doit être utilisé après le json et urlencoded, sinon il ne fonctionne pas!
Demande streaming a fonctionné pour moi
postdata.split("&")
serait à la charge de base du modulequerystring = require('querystring')
et puis analyser votrepostdata
avecquerystring.parse(postdata)
;Que j'ai pu trouver tous les paramètres à l'aide de code suivant pour les deux POST et OBTENIR demandes.
JS:
param
est utilisé pour les requêtes GET.. pas de POSTE et par 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, de sorte que votre exemple est mauvais sur de nombreux niveaux.d'utiliser express-fileupload paquet
Vous utilisez le 'req.de la requête.post de mal avec la méthode 'req.de la requête.post fonctionne avec 'method=get'
'method=post" travaille avec le corps de l'analyseur.
Essaie juste de faire ceci en changeant de poste pour obtenir
Et dans l'express code à utiliser app.get'