Ich weiß, wie man die Parameter für Abfragen wie diese erhält:
app.get('/sample/:id', routes.sample);
In diesem Fall kann ich req.params.id
den Parameter abrufen (z . B. 2
in /sample/2
).
/sample/2?color=red
Wie kann ich jedoch für URLs wie auf die Variable zugreifen color
?
Ich habe es versucht, req.params.color
aber es hat nicht funktioniert.
node.js
express
query-string
Hanfei Sun.
quelle
quelle
id
in Ihrer Funktion folgendermaßen ermitteln :var sampleId = req.params.id;
.req.params.whatever
in neuesten Versionen.req.params
ist anders alsreq.query
! expressjs.com/en/api.html#req.params expressjs.com/en/api.html#req.query @adelriosantiagoVerwenden Sie req.query, um den Wert im Abfragezeichenfolgenparameter in der Route abzurufen. Siehe Anfrage . Angenommen, Sie möchten in einer Route http: // localhost: 3000 /? Name = satyam den Wert für den Parameter name abrufen. Der Routen-Handler "Get" lautet dann wie folgt: -
quelle
Update:
req.param()
ist jetzt veraltet, verwenden Sie diese Antwort daher in Zukunft nicht mehr.Ihre Antwort ist der bevorzugte Weg, aber ich dachte, ich möchte darauf hinweisen, dass Sie auch mit allen auf URL-, Post- und Routenparameter zugreifen können
req.param(parameterName, defaultValue)
.In Ihrem Fall:
Aus dem Express-Guide:
Beachten Sie, dass in der Anleitung Folgendes angegeben ist:
In der Praxis habe ich jedoch festgestellt
req.param()
, dass dies klar genug ist und bestimmte Arten des Refactorings einfacher macht.quelle
Abfragezeichenfolge und Parameter sind unterschiedlich.
Sie müssen beide in einer einzelnen Routing-URL verwenden
Bitte überprüfen Sie das folgende Beispiel kann für Sie nützlich sein.
Der Link zum Übergeben Ihres zweiten Segments ist Ihr ID-Beispiel: http: // localhost: port / sample / 123
Wenn Sie auf ein Problem stoßen, verwenden Sie bitte Übergeben von Variablen als Abfragezeichenfolge mit '?' Operator
Holen Sie sich einen Link wie in diesem Beispiel: http: // localhost: port / sample? Id = 123
Beides in einem einzigen Beispiel
Beispiel für einen Link abrufen: http: // localhost: port / sample / 123? Id = 123
quelle
@ Zugwaits Antwort ist richtig.
req.param()
ist veraltet. Sie sollten verwendenreq.params
,req.query
oderreq.body
.Aber nur um es klarer zu machen:
req.params
wird nur mit den Routenwerten gefüllt. Das heißt, wenn Sie eine Route wie haben/users/:id
, können Sieid
entweder auf die inreq.params.id
oder zugreifenreq.params['id']
.req.query
undreq.body
wird mit allen Parametern gefüllt, unabhängig davon, ob sie sich in der Route befinden oder nicht. Natürlich sind Parameter in der Abfragezeichenfolge inreq.query
und Parameter in einem Post-Body in verfügbarreq.body
.Wenn Sie also Ihre Fragen beantworten, wie
color
es nicht in der Route enthalten ist, sollten Sie in der Lage sein, sie mitreq.query.color
oder zu erhaltenreq.query['color']
.quelle
Das Express-Handbuch besagt, dass Sie req.query verwenden sollten, um auf den QueryString zuzugreifen.
quelle
quelle
Eine nette Technik, die ich mit einigen meiner Apps in Express verwendet habe, besteht darin, ein Objekt zu erstellen, das die Abfrage-, Parameter- und Textfelder des Express-Anforderungsobjekts zusammenführt.
Dann können Sie in Ihrem Controller-Body oder an einer anderen Stelle im Bereich der Express-Anforderungskette Folgendes verwenden:
Dies macht es schön und praktisch, einfach in alle "benutzerdefinierten Daten" einzutauchen, die ein Benutzer möglicherweise mit seiner Anfrage gesendet hat.
Hinweis
Warum das Feld "Requisiten"? Da dies ein abgeschnittenes Snippet war, verwende ich diese Technik in einer Reihe meiner APIs. Ich speichere auch Authentifizierungs- / Autorisierungsdaten auf diesem Objekt, Beispiel unten.
quelle