2012-06-29 18 views
51

que tienen una ruta en mi aplicación expreso que tiene este aspecto:expresos condiciones parámetros rutas

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

El ID será siempre un número. Sin embargo, en este momento, esta ruta coincide con otras cosas, como /login.

Creo que quiero dos cosas de esta:

  1. utilizar solamente esta ruta si el ID es un número, y
  2. sólo si no hay una ruta para ese parámetro de específico ya definido (como el choque con /login).

¿Se puede hacer esto?

Respuesta

104

Ampliando la respuesta de Marius, que puede proporcionar la expresión regular y el nombre de parámetro:

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

Genial, pero ahora si tengo una ruta fo diga '/ 1' en otro lugar, todavía va a llamar eso. ¿Alguna manera de prevenir esto? –

+8

Siempre que la ruta explícita '/ 1' se agregue primero tendrá prioridad. – JohnnyHK

+2

Puede colocar las rutas explícitas primero, como dice JohnnyHK. También es posible que pueda definir el RegEx para que no coincida con las rutas que desea omitir. – danmactough

2

que puede utilizar:

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

o este :

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