Express路由将变量传递给所需文件

时间:2017-03-21 18:07:16

标签: node.js rest express routing request

我正在尝试将所有控制器调用到名为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参数没有传递给处理它的文件,即village.js

villages.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 :(
    })

如何使用此文件结构,以便我的控制器不会弄乱,同时将此参数传递给控制器​​文件,以便即使路径为('/')也可以使用它吗

1 个答案:

答案 0 :(得分:2)

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

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);