Coger todas las rutas EXCEPTO para / iniciar sesión

Actualmente estoy escribiendo una API que requerirá que un usuario pase un token de autenticación en el encabezado de cada solicitud. Ahora sé que puedo crear una ruta catchall decir

app.get('/*', function(req,res){ }); 

pero me preguntaba cómo lo hago para que excluya ciertas rutas como /login o / ?

No estoy seguro de lo que quiere que suceda cuando un usuario accede a /login o / , pero puede crear rutas separadas para ellos; Si los declara antes del catch-all, ellos obtienen los primeros requisitos para manejar las solicitudes entrantes:

 app.get('/login', function(req, res) { ... }); app.get('/', function(req, res) { ... }); app.get('*', function(req, res) { ... }); 

Siempre puede colocar la ruta catch-all después de las que desea excluir (consulte la respuesta de robertklep ).

Pero a veces simplemente no quiere preocuparse por el orden de sus rutas. En este caso todavía puedes hacer lo que quieras:

 app.get('*', function(req, res, next) { if (req.url === '/' || req.url === '/login') return next(); ... }); 

Si desea validar las credenciales o la autenticidad en cada solicitud, debe usar la función de enrutamiento expreso “todas”, puede usarla así:

 app.all('/api/*', function(req, res, next){ console.log('General Validations'); next(); }); 

Usted podría colocarlo antes de cualquier cosa de enrutamiento.

Tenga en cuenta que en este caso usé “/ api / ” como ruta, puede usar “/ ” para que se ajuste a sus necesidades.

Espero que no sea demasiado tarde para ayudar a alguien aquí.

Otra forma de hacer un manejador de ruta de captura de todo es esta:

 app.get('/login', function(req, res) { //... login page }); app.get('/', function(req, res) { //...index page }); app.get('/:pageCalled', function(req, res) { console.log('retrieving page: ' + req.params.pageCalled); //... mypage.html }); 

Esto funciona exactamente igual que la respuesta de robertklep (aceptada), pero le brinda más información sobre lo que el usuario realmente solicitó. Ahora tiene un slug req.params.pageCalled para representar cualquier página solicitada y puede dirigir al usuario a la página apropiada si tiene varias páginas diferentes.

Un gotchya a tener en cuenta (gracias a @agmin) con este enfoque, /:pageCalled solo detectará rutas con un solo / , por lo que no obtendrá /route/1 , etc. más páginas (thx @softcode)