赶上所有路线除了/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)