赶上所有路线除了/login

我目前正在编写一个API,这将要求用户在每个请求的标题中传递一个身份validation令牌。 现在我知道我可以创build一个catchall路线说

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

但我想知道如何使它不包括某些路线,如/login/

我不确定用户访问/login/时想要发生什么,但可以为这些用户创build单独的路由; 如果你在全面的情况下宣布他们,他们会首先处理收到的请求:

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

您可以将所有路线放在要排除的路线之后(请参阅robertklep答案)。

但有时你根本不想关心你的路线的顺序。 在这种情况下,你仍然可以做你想做的事情:

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

如果您想在每个请求中validation凭证或真实性,您应该使用快速路由function“全部”,您可以像这样使用它:

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

你可以把它放在任何路由的东西之前。

请注意,在这种情况下,我使用“/ api / ”作为path,您可以使用“/ ”它适合您的需要。

希望在这里帮助别人还不算晚。

另一种制作全部路由处理程序的方法是:

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

这与robertklep的(接受的)答案完全一样,但它给了你更多关于用户实际要求的信息。 你现在有一个req.params.pageCalled来代表任何被请求的页面,如果你有几个不同的页面,可以引导用户到合适的页面。

一个gotchya警告(thx @agmin)这个方法, /:pageCalled只会捕获路由与一个/ ,所以你不会得到/route/1等。使用像/:pageCalled/:subPageCalled更多网页(thx @ sofccode)