Verwenden mehrerer Parameter in der URL in Express

73

Ich verwende Express mit Knoten und habe eine Anforderung, in der der Benutzer die URL anfordern kann als : http://myhost/fruit/apple/red.

Eine solche Anforderung gibt eine JSON-Antwort zurück.

Die JSON-Daten vor dem obigen Aufruf sehen wie folgt aus:

{
    "fruit": {
        "apple": "foo"
    }
}  

Bei der obigen Anforderung sollten die Antwort-JSON-Daten lauten:

{
    "apple": "foo",
    "color": "red"
}

Ich habe Express so konfiguriert, dass es wie folgt routet:

app.get('/fruit/:fruitName/:fruitColor', function(request, response) {
    /*return the response JSON data as above using request.params.fruitName and 
request.params.fruitColor to fetch the fruit apple and update its color to red*/
    });  

Das geht aber nicht. Ich bin mir nicht sicher, wie ich mehrere Parameter übergeben soll, das heißt, ich bin mir nicht sicher, ob dies /fruit/:fruitName/:fruitColorder richtige Weg ist. Ist es?

callmekatootie
quelle

Antworten:

137
app.get('/fruit/:fruitName/:fruitColor', function(req, res) {
    var data = {
        "fruit": {
            "apple": req.params.fruitName,
            "color": req.params.fruitColor
        }
    }; 

    send.json(data);
});

Wenn dies nicht funktioniert, versuchen Sie, mit console.log (req.params) zu sehen, was es Ihnen gibt.

chovy
quelle
1
Wissen Sie, ob so etwas möglich ist? /fruit/:fruitName/vegetable/:vegetableName'
MadPhysicist
2
sicher. mach es einfach so, dann mach es req.params.fruitNameundreq.params.vegetableName
chovy
1
Es funktioniert, aber es kommt vor, dass statische Ressourcen /fruitin diesem Fall unter " /fruit/js/main.jsWo ich public/js/main.jsmeine statischen Dateien habe" angesprochen werden.
Loretoparisi
Dies funktioniert nicht, wenn einer der Parameter fehlt
Dipanshu Mahla
@chovy Was ist die richtige Abfragezeichenfolge, um einen solchen Endpunkt aufzurufen? obstName = $ {Fruchtname} & Fruchtfarbe = $ {Fruchtfarbe}
eran otzap
21

Für das, was du willst, hätte ich verwendet

    app.get('/fruit/:fruitName&:fruitColor', function(request, response) {
       const name = request.params.fruitName 
       const color = request.params.fruitColor 
    });

oder noch besser

    app.get('/fruit/:fruit', function(request, response) {
       const fruit = request.params.fruit
       console.log(fruit)
    });

wo Obst ein Objekt ist. In der Client-App rufen Sie einfach an

https://mydomain.dm/fruit/{"name":"My fruit name", "color":"The color of the fruit"}

und als Antwort sollten Sie sehen:

    //  client side response
    // { name: My fruit name, color:The color of the fruit}
Bandito11
quelle
1
Dies scheint gut zu funktionieren und ist erweiterbarer, wenn Sie später Parameter hinzufügen. Ich habe beim Erstellen der URL eine JSON.stringify auf der Clientseite und eine JSON.parse auf dem Server im Routing erstellt.
James
Ah, du hast recht. Ich habe vergessen, JSONs .parse und .stringify zu meiner vorgeschlagenen Antwort hinzuzufügen, aber ich mache dasselbe auch, wenn ich ein Objekt als Parameter übergebe, damit ich sicher bin, dass ich die richtige Form des Objekts als Zeichenfolge übergebe.
Bandito11
1
Bitte erklären Sie mir, wie das funktioniert. Geben eines String-JSON als Parameter für eine GET-Anforderung. Das scheint eine wirklich schlechte Idee zu sein. Wenn der JSON das GET-Zeichenlimit überschreitet, was werden Sie dann tun? Auch wenn der JSON einen Wert enthält, der die URL-Codierung beschädigt, wird er beschädigt (dies kann jedoch leicht behoben werden).
Edeph