2012-07-26 15 views
7

Ich bin neu zu Node/Express .. Ich params sehen bekommen wie so erfasst werden req.body.)NodeJS, GET Express POST params

Ich bin mir der app.all bewusst, aber gibt es eine einzige Möglichkeit, die ich alle Variablen für GET und POST bei der Verwendung von app.all bekommen kann? (Ich bin auch zu $ ​​_REQUEST in php verwendet :)

thx,

+0

'JSON.stringify (req.query)' für 'get' und' JSON.stringify (req.body) 'für' Post' vorausgesetzt, Sie 'app.use (auszudrücken. bodyParser()) ' –

Antwort

17

Sie sind den Umgang mit drei verschiedenen Methoden der Parameterübergabe:

1) Pfad-Parameter, die Router erfasst ausdrücklichen in , wenn Sie Doppelpunkt-Präfix-Komponenten oder Regex-Captures in Ihrer Route verwenden. Diese können sowohl in GET- als auch in POST-Anfragen vorhanden sein.

2) URL-Abfragezeichenfolgenparameter, die in req.query erfasst werden, wenn Sie die express.query Middleware verwenden. Diese können auch in GET- und POST-Anfragen vorhanden sein.

3) Körperparameter, die in req.body erfasst werden, wenn Sie die express.bodyParser Middleware verwenden. Diese sind nur in POST-Anfragen vorhanden, die eine Content-Type von "x-www-form-urlencoded" haben.

Sie müssen also alle drei Objekte (falls vorhanden) in eins zusammenführen. Es gibt keine systemeigenen Methoden Object, um dies zu tun, aber es gibt viele beliebte Problemumgehungen. Zum Beispiel definiert die underscore.js Bibliothek eine extend-Funktion, die Sie

req.params=_.extend(req.params || {}, req.query || {}, req.body || {}). 

schreiben würde erlauben Wenn Sie eine Bibliothek nicht verwenden wollen und möchten Ihre eigene Art und Weise zu erweitern Objekte rollen, werfen Sie einen Blick auf this blog post .

+3

Ich glaube' req.param() 'tut genau das - http://expressjs.com/api.html#req.param –

0

personnaly, i fusionieren req.params, req.body, req.query in einem einzigen Objekt req.props mit Object.assign()

in ES6:

Sie müssen nur diese in Ihrer Route schreiben:

app.all('/myroute/:myparam', (req, res, next) => { 
     // merge all req data in one 
     req.props = Object.assign(req.query, req.params, req.body); 
     // optional : 
     // delete req.query; 
     // delete req.params; 
     // delete req.body; 
    }); 

In ES5:

Jetzt können Sie leicht auf Ihre GET, POST, PUT-Parameter mit req.props in all Ihren Routen zugreifen, seien Sie vorsichtig über ähnliche Namen, wenn Sie sich entscheiden, die alten req zu löschen.

Sie können auch eine Middleware/Funktionen machen, um es noch nützlicher zu machen.

Mehr über Object.assign(): https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/assign