【问题标题】:Capture part of node.js route捕获部分 node.js 路由
【发布时间】:2013-12-17 02:04:23
【问题描述】:
app.get('/users/:userId/profile', ProfileHandler);
app.get('/page/:userId/profile', ProfileHandler);
app.get('/photo/:userId/profile', ProfileHandler);

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

理想情况下,我希望避免使用正则表达式将其设为单一路由,因为这只是我真实用例的一个简化示例。

【问题讨论】:

  • This answer 可能会引导您走向正确的方向。您也可以选择只使用正则表达式,匹配项将被捕获在一个数组中,例如 req.params[0] 等等。

标签: node.js express


【解决方案1】:

如果由于绑定而提前知道,为什么不直接将信息传递到那里?

app.get('/users/:userId/profile', ProfileHandler.bind(null, 'users'));

function ProfileHandler(pageRoot, req, res, next){
    switch (pageRoot){
        case 'users':

            break;
        case 'page':
            break;
    }
});

【讨论】:

    【解决方案2】:

    根据您使用的模式,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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-09-30
      • 2013-01-01
      • 2021-01-31
      • 1970-01-01
      • 2019-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-13
      相关资源
      最近更新 更多