2013-02-28 10 views
30

Używam Express z węzłem i mam wymóg, w którym użytkownik może zażądać adresu URL jako: http://myhost/fruit/apple/red.Używanie wielu parametrów w adresie URL w wyrażeniu

Takie żądanie zwróci odpowiedź JSON.

dane JSON, zanim powyższe wywołanie wygląda następująco:

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

z powyższym wniosek, odpowiedź dane JSON powinno być:

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

mam skonfigurowane express do trasy w następujący sposób:

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*/ 
    }); 

Ale to nie działa. Nie jestem pewien, jak przekazać wiele parametrów, to znaczy, nie jestem pewien, czy /fruit/:fruitName/:fruitColor jest prawidłowy sposób to zrobić. Czy to jest?

Odpowiedz

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

    send.json(data); 
}); 

Jeśli to nie zadziała, spróbuj użyć console.log (req.params), aby zobaczyć, co daje.

+0

Czy wiesz, że jeśli coś jest możliwe? '/ fruit /: fruitName/vegetable /: vegetableName'' – MadPhysicist

+2

pewnie. po prostu zrób to, następnie wykonaj 'req.params.fruitName' i' req.params.vegetableName' – chovy

+0

Działa, ale zdarza się, że statyczne zasoby będą adresowane w '/ fruit' w tym przypadku jak'/fruit/js/main.js' gdzie mam 'public/js/main.js' jako mój folder plików statycznych. – loretoparisi

3

o co chcesz bym wykorzystywane

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

albo jeszcze lepiej

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

gdzie owoc jest obiekt. Więc w aplikacji klienckiej wystarczy zadzwonić

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

i jako odpowiedź powinieneś zobaczyć:

// client side response 
    // { name: My fruit name, , color:The color of the fruit} 
+0

Wydaje się, że działa dobrze i jest bardziej rozszerzalny, jeśli dodasz później parametry. Zrobiłem JSON.stringify po stronie klienta podczas budowania adresu URL i JSON.parse na serwerze w routingu. – james

+0

Ach, masz rację. Zapomniałem dodać .parse i .string do JSON-a do mojej sugerowanej odpowiedzi, ale robię to samo również, gdy przekazuję obiekt jako parametr, więc jestem pewien, że przekazuję prawidłową formę obiektu jako ciąg znaków. – Bandito11

Powiązane problemy