捕获node.js路由的一部分

app.get('/users/:userId/profile', ProfileHandler); app.get('/page/:userId/profile', ProfileHandler); app.get('/photo/:userId/profile', ProfileHandler); 

如果我有上述3条路线,我怎么捕捉第一部分,以便处理程序知道要求什么? 我希望将userspagephoto作为请求对象的一部分发送给处理程序。

理想情况下,我想避免使用正则expression式来做这个单一的路由,因为这只是我真实用例的一个简单的例子。

如果由于绑定提前知道,为什么不把信息传递给那里呢?

 app.get('/users/:userId/profile', ProfileHandler.bind(null, 'users')); function ProfileHandler(pageRoot, req, res, next){ switch (pageRoot){ case 'users': break; case 'page': break; } }); 

根据您使用的模式,ProfileHandler将传递一个req和res对象。 请求有一个url属性,你可以拆分和切换大小写:

 app.get('/users/:userId/profile', ProfileHandler); app.get('/page/:userId/profile', ProfileHandler); app.get('/photo/:userId/profile', ProfileHandler); function ProfileHandler(req,res){ var reqType = req.url.split('/')[1]; switch(reqType){ case 'users': //DO SOMETHING COOL break; } } 

或者,您可以添加在请求上设置该值的中间件。

 app.use(function (req, res, next) { var reqType = req.url.split('/')[1]; req.handlerTarget = reqType; }); function ProfileHandler(req,res){ switch(req.handlerTarget){ case 'users': //DO SOMETHING COOL break; } }