【问题标题】:Node.js Express nested resourcesNode.js Express 嵌套资源
【发布时间】:2017-09-21 14:35:04
【问题描述】:

我想像下面这样嵌套资源。

/// fileA.js
app.use('/dashboards/:dashboard_id/teams', teams);
[...]

///teams.js
router.get('/', function(req, res, next) {
[...]
}

但我无法在 teams 中获取 req.params["dashboard_id"] 参数,因为它似乎已被参数值替换。 我试图通过调用中间函数并将参数传递到某个地方来解决问题,但我不知道在哪里...... 你有答案吗? 谢谢, 佛朗哥

【问题讨论】:

    标签: node.js rest express nested


    【解决方案1】:

    你可以试试这个解决方案:

    //declare a function that will pass primary router's params to the request
    var passPrimaryParams = function(req, res, next) {
        req.primaryParams = req.params;
        next();
    }
    
    /// fileA.js
    app.use('/dashboards/:dashboard_id/teams', passPrimaryParams);
    app.use('/dashboards/:dashboard_id/teams', teams);
    
    ///teams.js
    router.get('/', function(req, res, next) {
        var dashboardId = req.primaryParams['dashboard_id'];  //should work now
        //here you may also use req.params -- current router's params
    }
    

    【讨论】:

      【解决方案2】:

      在撰写本文时使用 Express 4.0.0 或更高版本:

      为了让路由器理解带有变量的嵌套资源,您需要使用app.use 为每个基本路径创建和绑定一个新路由器。

      //creates a new router
      var dashboardRouter = express.router();
      
      //bind your route
      dashboardRouter.get("/:dashboard_id/teams", teams);
      
      //bind to application router
      app.use('/dashboards', dashboardRouter);
      

      这样 Express 将看到路径的第一部分并转到 /dashboards 路径,该路径具有 :dashboard_id/teams 路径。

      【讨论】:

      • 这将要求我们为父路由器中的每个路由绑定一个路由,这并不理想。如果可能,最好使用 router.use。
      【解决方案3】:

      您可以在此处使用mergeParams 选项

      // fileA.js
      app.use('/dashboards/:dashboard_id/teams', teams);
      
      // teams.js
      const router = express.Router({ mergeParams: true })
      router.get('/', function(req, res, next) {
        // you will have access to req.params.dashboard_id here
      }
      

      你也可以看到这个答案:Rest with Express.js nested router

      【讨论】:

        猜你喜欢
        • 2011-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-23
        相关资源
        最近更新 更多