app.get('/users/:userId/profile', ProfileHandler);
app.get('/page/:userId/profile', ProfileHandler);
app.get('/photo/:userId/profile', ProfileHandler);
如果我有上述3条路线,我如何捕捉第一部分,以便处理程序知道所请求的是什么?我希望将users
或page
或photo
作为请求对象的一部分发送给处理程序。
理想情况下,我想避免使用正则表达式进行单一路由,因为这只是我真实用例的一个愚蠢的例子。
答案 0 :(得分:1)
如果由于绑定而提前知道,为什么不直接传递信息?
app.get('/users/:userId/profile', ProfileHandler.bind(null, 'users'));
function ProfileHandler(pageRoot, req, res, next){
switch (pageRoot){
case 'users':
break;
case 'page':
break;
}
});
答案 1 :(得分:0)
根据您使用的模式,ProfileHandler将传递req和res对象。 req有一个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;
}
}