2017-03-21 1 views
1

Ich versuche, alle meine Controller in einer Datei namens Index aufgerufen haben, so dass ich nicht nur alle Express-Routen in einer Datei erstellen.Express Routing Pass Variable auf die erforderliche Datei

Deshalb meine index.js wie folgt aussieht:

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

Dann habe ich die auth.js haben und users.js Dateien.

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

Und das funktioniert gut für diese 2 beide. Der Zugriff auf /api/auth/register oder /api/users/:user_id funktioniert wie erwartet.

Aber wenn für /api/{world_id}/villages dies nicht geht zu gehen versucht, wie erwartet, da der world_id Parameter in der Datei erhalten nicht verarbeiten es übergeben, welche villages.js

villages.js ist:

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

Wie kann ich diese Dateistruktur haben, so dass meine Controller nicht unordentlich werden und gleichzeitig diesen Parameter an die Controller-Datei übergeben, damit er sie auch verwenden kann, wenn die Route ('/') ist?

+0

tut Route '/: world_id/villages' nicht you'r Bedürfnisse nicht passt? Aber wenn du eine Variable übergeben willst, solltest du deinen Inhalt mit einer Funktion umhüllen und mit dem Parameter: 'app.use (require ('./ some_dinamyc_routes') ('world_id_1')) aufrufen;' Aber das ist schlimm Übung .. – Maikal

+0

@Maikal die Route passt gut. Aber das Argument ': world_id' wird nicht an meine Datei dörfs.js übergeben, die die Logik der Rückgabe der Dörfer behandelt. –

+1

Sorry, vollständig nicht verstanden, Ihr Problem .. – Maikal

Antwort

1

Die einzige Möglichkeit, einen Parameter im Child-Router sichtbar zu machen, ist, ihn dort zu definieren. So in you'r Beispiel

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