【问题标题】:Express routing pass variable to required file快速路由传递变量到所需文件
【发布时间】:2017-08-13 14:00:11
【问题描述】:

我试图在一个名为 index 的文件中调用我的所有控制器,所以我不只是在一个文件中构建所有快速路由。

因此我的 index.js 看起来像:

//imports and stuff
router.use('/auth', require('./auth'))
router.use('/users', require('./users'))
router.use('/:world_id/villages', require('./villages'))
//export router

然后我有 auth.js 和 users.js 文件。

auth.js:

router.route('/register')
    .post(function(req, res) {
         //register the user
    })

users.js:

router.route('/:user_id')
    //GET user profile
    .get(function(req, res){
        // Use the req.params.userId to get the user by Id
    })

这对这两个都很有效。访问/api/auth/register/api/users/:user_id 按预期工作。

但是当尝试使用/api/{world_id}/villages 时,这并没有按预期进行,因为world_id 参数没有传递给处理它的文件,即村庄.js

村庄.js:

router.route('/')
    //GET all villages of the current world (world_id)
    .get(function(req, res){
        // Use the req.params.world_id to get it... but this is undefined :(
    })

我怎样才能拥有这个文件结构,这样我的控制器就不会变得凌乱,同时,将此参数传递给控制器​​文件,以便即使路由是('/')它也可以使用它?

【问题讨论】:

  • 路由/:world_id/villages 是否不符合您的需求?但是如果你想传递一个变量,你应该用一个函数包装你的内容并用参数调用它:app.use(require('./some_dinamyc_routes')('world_id_1')); 但这是一个不好的做法..
  • @Maikal 这条路线非常合适。但是参数:world_id 没有被传递给我处理返回村庄逻辑的villions.js 文件。
  • 对不起,完全不明白你的问题..
  • github.com/expressjs/express/issues/2138 这是故意的行为。子路由器看不到父母的参数。还有这个:github.com/expressjs/express/issues/2151

标签: node.js rest express routing request


【解决方案1】:

使任何参数在子路由器中可见的唯一方法是在其中定义它。 所以在你的例子中

router.route('/:world_id/villages/')
    //GET all villages of the current world (world_id)
    .get(function(req, res){
        // req.params.world_id is set
    })
// ...
app.use('/', router);

【讨论】:

    猜你喜欢
    • 2015-10-07
    • 2018-08-10
    • 2018-12-26
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多