2013-02-28 4 views
30

Я использую Express с узлом, и у меня есть требование, в котором пользователь может запросить URL-адрес как: http://myhost/fruit/apple/red.Использование нескольких параметров в URL в экспресс

Такой запрос возвращает ответ JSON.

В JSON данные, прежде чем выше вызов выглядит так:

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

С выше запрос, ответ данные JSON должны быть:

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

Я настроил экспресс маршрутизировать следующим образом:

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

Но это не сработает. Я не уверен, как передать несколько параметров, то есть я не уверен, что /fruit/:fruitName/:fruitColor - правильный способ сделать это. Это?

ответ

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

    send.json(data); 
}); 

Если это не сработает, попробуйте использовать console.log (req.params), чтобы узнать, что он вам дает.

+0

Вы знаете, если что-то, как это возможно? '/ фрукты /: фруктыName/овощи /: овощиName'' – MadPhysicist

+2

уверенный. просто сделайте это так, а затем выполните 'req.params.fruitName' и' req.params.vegetableName' – chovy

+0

Это работает, но в этом случае статические ресурсы будут обрабатываться в '/ fruit', например'/fruit/js/main.js' где у меня есть 'public/js/main.js' как моя статическая папка с файлами. – loretoparisi

3

За то, что вы хотите, я бы использовал

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

или еще лучше

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

, где плод является объектом. Таким образом, в приложении клиента вы просто позвоните

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

и в ответ вы должны увидеть:

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

Это, кажется, работает отлично и более расширяемо, если вы добавите параметры позже. Я делал JSON.stringify на стороне клиента при создании URL-адреса и JSON.parse на сервере в маршрутизации. – james

+0

А, ты прав. Я забыл добавить JSON's .parse и .stringify к моему предложенному ответу, но я делаю то же самое и при передаче объекта в качестве параметра, поэтому я уверен, что передаю правильную форму объекта в виде строки. – Bandito11

Смежные вопросы