【发布时间】: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