捕获node.js路由的一部分

时间:2013-12-17 02:04:24

标签: node.js express

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

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

理想情况下,我想避免使用正则表达式进行单一路由,因为这只是我真实用例的一个愚蠢的例子。

2 个答案:

答案 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;
    }
}