2012-06-29 5 views
51

Ho una rotta sulla mia app espresso che assomiglia a questo:Condizioni Generali di parametri percorsi

app.get('/:id', function (request, response) { 
    … 
}); 

L'ID sarà sempre un numero. Tuttavia, al momento questa rotta corrisponde ad altre cose, come ad esempio /login.

Penso che voglio due cose da questo:

  1. di utilizzare solo questo percorso se l'ID è un numero, e
  2. solo se non c'è un percorso per quella specifica paramater già definito (come lo scontro con /login).

Questo può essere fatto?

risposta

104

Ampliando la risposta di Mario, è in grado di fornire l'espressione regolare e il nome del parametro:

app.get('/:id(\\d+)/', function (req, res){ 
    // req.params.id is now defined here for you 
}); 
+0

Grande, ma ora se ho un percorso per r dire '/ 1' altrove, lo chiamerà ancora. Ad ogni modo per impedirlo? –

+8

Fintanto che il percorso esplicito '/ 1' viene aggiunto per primo, avrà la precedenza. – JohnnyHK

+2

È possibile posizionare prima gli instradamenti espliciti, come dice JohnnyHK. Potrebbe anche essere possibile definire il RegEx in modo che non corrisponda ai percorsi che si desidera saltare. – danmactough

2

È possibile utilizzare:

// /12345 
app.get(/\/([^\/]+)\/?/, function(req, res){ 
    var id = req.params[0]; 
    // do something 
}); 

o del presente :

// /post/12345 
app.get(/\/post\/([^\/]+)\/?/, function(req, res){ 
    var id = req.params[0]; 
    // do something 
});