我正在尝试将所有控制器调用到名为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 :(
})
如何使用此文件结构,以便我的控制器不会弄乱,同时将此参数传递给控制器文件,以便即使路径为('/')也可以使用它吗
答案 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);