2013-02-28 18 views
30

Sto usando Express con nodo e mi hanno un requisito in cui l'utente può richiedere l'URL come: http://myhost/fruit/apple/red.Utilizzo di più parametri URL in veloce

Tale richiesta restituirà una risposta JSON.

I dati JSON, prima della chiamata di cui sopra si presenta come:

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

Con la richiesta di cui sopra, i dati JSON risposta dovrebbe essere:

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

Ho configurato espresso al percorso come segue:

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

Ma questo non funziona. Non sono sicuro di come passare più parametri, cioè, non sono sicuro se /fruit/:fruitName/:fruitColor è il modo corretto per farlo. È?

risposta

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

    send.json(data); 
}); 

Se ciò non funziona, provare a utilizzare console.log (req.params) per vedere cosa ti sta dando.

+0

fai a sapere se qualcosa di simile a questo è possibile? '/ fruit /: fruitName/vegetable /: vegetableName'' – MadPhysicist

+2

sicuro. basta farlo in quel modo poi non '' e req.params.fruitName' req.params.vegetableName' – chovy

+0

Funziona, ma succede che le risorse statiche saranno affrontati in '/ fruit' in questo caso come'/frutta/js/main.js' dove ho 'public/js/main.js' come cartella dei miei file statici. – loretoparisi

3

Per quello che vuoi io ho usato

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

o meglio ancora

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

in cui la frutta è un oggetto. Così nella applicazione client basta chiamare

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

e come risposta si dovrebbe vedere:

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

Questo sembra funzionare bene ed è più estendibile se si aggiungono i parametri più tardi. Ho creato un JSON.stringify sul lato client durante la creazione dell'URL e di un JSON.parse sul server nel routing. – james

+0

Ah, hai ragione. Ho dimenticato di aggiungere JSON's .parse e .stringify alla mia risposta suggerita, ma faccio lo stesso anche quando si passa un oggetto come parametro, quindi sono sicuro che sto passando il modulo corretto dell'oggetto come una stringa. – Bandito11