678 Stimmen

Wie greife ich auf die GET-Parameter nach "?" in Express zu?

Ich weiß, wie man die Parameter für Abfragen wie diese erhält:

app.get('/beispiel/:id', routes.beispiel);

In diesem Fall kann ich req.params.id verwenden, um den Parameter (z.B. 2 in /beispiel/2) zu erhalten.

Wie kann ich jedoch auf die Variable color für URLs wie /beispiel/2?color=red zugreifen?

Ich habe req.params.color ausprobiert, aber es hat nicht funktioniert.

1016voto

Hanfei Sun Punkte 41905

Also, nachdem ich die Express-Referenz überprüft habe, habe ich herausgefunden, dass req.query.color mir den Wert zurückgeben würde, den ich suche.

req.params bezieht sich auf Elemente mit einem ':' in der URL und req.query bezieht sich auf Elemente, die mit '?' verbunden sind

Beispiel:

GET /something?color1=red&color2=blue

Dann in Express, der Handler:

app.get('/something', (req, res) => {
    req.query.color1 === 'red'  // true
    req.query.color2 === 'blue' // true
})

99voto

satyam kumar Punkte 1399

Verwenden Sie req.query, um den Wert des Abfragezeichenfolgenparameters in der Route abzurufen. Weitere Informationen finden Sie unter req.query. Sagen Sie, wenn Sie in einer Route, http://localhost:3000/?name=satyam, den Wert für den Namen-Parameter abrufen möchten, wird Ihr 'Get'-Route-Handler folgendermaßen aussehen

app.get('/', function(req, res){
    console.log(req.query.name);
    res.send('Antwort an Client gesendet::'+req.query.name);
});

77voto

Abfragezeichen und Parameter sind unterschiedlich.

Sie müssen beide in einer einzelnen Routing-URL verwenden

Bitte überprüfen Sie das folgende Beispiel, es könnte für Sie nützlich sein.

app.get('/beispiel/:id', function(req, res) {

 var id = req.params.id; // oder verwende req.param('id')

 ................

});

Holen Sie sich den Link, um Ihr zweites Segment zu übergeben, beispiel: http://localhost:port/beispiel/123

Wenn Sie Probleme haben, verwenden Sie bitte das Übergeben von Variablen als Abfragezeichen mit dem '?' Operator

  app.get('/beispiel', function(req, res) {

     var id = req.query.id; 

      ................

    });

Holen Sie sich den Link, den Sie mögen, beispiel: http://localhost:port/beispiel?id=123

Beides in einem einzelnen Beispiel

app.get('/beispiel/:id', function(req, res) {

 var id = req.params.id; // oder verwende req.param('id')
 var id2 = req.query.id; 
  ................

});

Beispiel-Link: http://localhost:port/beispiel/123?id=123

75voto

Aaron Silverman Punkte 20975

Aktualisierung: req.param() ist jetzt veraltet, verwenden Sie also diese Antwort nicht mehr.


Ihre Antwort ist der bevorzugte Weg, es zu tun, aber ich dachte, ich weise darauf hin, dass Sie auch auf URL-, Post- und Routenparameter mit req.param(parameterName, defaultValue) zugreifen können.

In Ihrem Fall:

var color = req.param('color');

Vom Express-Handbuch:

Die Suche erfolgt in folgender Reihenfolge:

  • req.params
  • req.body
  • req.query

Beachten Sie, dass das Handbuch folgendes angibt:

Direkter Zugriff auf req.body, req.params und req.query sollte zur Klarheit bevorzugt werden - es sei denn, Sie akzeptieren tatsächlich Eingaben von jedem Objekt.

In der Praxis habe ich jedoch festgestellt, dass req.param() klar genug ist und bestimmte Arten von Refactorings einfacher macht.

49voto

Andre Pena Punkte 52140

Die Antwort von @Zugwait ist korrekt. req.param() ist veraltet. Sie sollten req.params, req.query oder req.body verwenden.

Aber um es klarer zu machen:

req.params wird nur mit den Routenwerten befüllt. Das heißt, wenn Sie eine Route wie /benutzer/:id haben, können Sie auf die id entweder über req.params.id oder req.params['id'] zugreifen.

req.query und req.body werden mit allen Parametern befüllt, unabhängig davon, ob sie in der Route sind oder nicht. Natürlich werden Parameter im Query-String über req.query verfügbar sein und Parameter im Post-Body über req.body.

Also, um Ihre Fragen zu beantworten, da color nicht in der Route ist, sollten Sie in der Lage sein, es über req.query.color oder req.query['color'] zu erhalten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X