2017-03-21 10 views
1

インデックスと呼ばれるファイル内ですべてのコントローラを呼び出そうとしているので、すべてのエクスプレスルートを1つのファイルに作成するだけではありません。それから私はauth.jsとusers.jsファイルを持っているExpressルーティングが必要なファイルに変数を渡す

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

したがって、私のindex.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 
    }) 

そして、これは、これらの2の両方に適しています。 /api/auth/registerまたは/api/users/:user_idにアクセスすると、期待どおりに動作します。

しかし、予想通りworld_idパラメータが

villages.js villages.jsでそれを処理し、ファイルに渡されませんので、これは行かない/api/{world_id}/villagesのために行くしようとしている:

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

you'rの例では、ルート '/ん:world_id/villages'はyou'rのニーズに合っていないのですか? しかし、変数を渡したい場合は、あなたのコンテンツを関数でラップし、パラメータ: 'app.use(require( './ some_dinamyc_routes')( 'world_id_1'));'でもそれは悪い – Maikal

+0

@Maikalルートはちょうどいいです。しかし、引数: 'world_id'は、村を返すロジックを扱う私のvillages.jsファイルに渡されません。 –

+1

申し訳ありませんが、あなたの問題を完全に理解していません.. – Maikal

答えて

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); 
関連する問題