捕获node.js路由的一部分
app.get('/users/:userId/profile', ProfileHandler); app.get('/page/:userId/profile', ProfileHandler); app.get('/photo/:userId/profile', ProfileHandler);
如果我有上述3条路线,我怎么捕捉第一部分,以便处理程序知道要求什么? 我希望将users
或page
或photo
作为请求对象的一部分发送给处理程序。
理想情况下,我想避免使用正则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; } }