2015-09-11 3 views
3

Je sais que je peux le faire dans Express:routeur express avec id

app.use('/:id', function (req, res){ // or app.get 
    console.log('Test param: ' + req.params.id); // "Test param: foo" 
}); 

pour obtenir mon paramètre url.

Lorsque je tente d'utiliser une logique routeur je l'ai fait:

index.js

var sites = require('./routes/sites'); 
app.use('/:id', sites); 

itinéraires/sites.js

var express = require('express'); 
var router = express.Router(); 

router.get('/', function(req, res, next) { 
    console.log(req.params.id); // logs "undefined" 
    // etc ... 
}); 

module.exports = router; 

cette logique ne ne fonctionne pas, je reçois {} dans le shell comm et, undefined pour req.params.id.

Une idée où ma logique est fausse?

+0

Comment se connecter 'undefined' si vous obtenez un 404 en même temps? – FaureHu

+0

@FaureHu hmm tu as raison, je n'ai pas de 404. Je l'ai eu quand j'ai essayé 'router.get ('/': id' essayant de déboguer le problème, j'ai juste' undefined' pour 'req. params.id' – Rikard

Répondre

4

Cela ne fonctionne pas, parce que ce n'est pas la façon dont express interagit avec ses Router s. La raison pour laquelle vous ne voyez pas id dans votre routeur, c'est parce que :id n'a pas été déclaré dans son champ d'application. Vous auriez besoin de faire quelque chose comme

app.use('/', sites); 

et dans votre routeur

var express = require('express'); 
var router = express.Router(); 

router.get('/:id', function(req, res, next) { 
    console.log(req.params.id); 
    // etc ... 
}); 

module.exports = router; 

vous pouvez essayer plus jouer avec app.param() voir docs pour des exemples http://expressjs.com/api.html#app.param

+0

Yuri, merci de vérifier cela, dans ce cas ai-je besoin d'avoir plusieurs app.use ('/', '(dossier racine appelant) pour chaque sous-routage dans différents modules ?, puis dans le module En utilisant 'app.get'? – Rikard

+0

La façon dont la plupart des gens utilisent les routeurs, c'est que vous spécifiez le sous-chemin, par exemple' app.use ('/ users', userRouter) ' –

+0

Je comprends cela, le problème ici est quand j'utilise un param'etre '/: id' directement'a partir de la racine, merci d'avoir clarifié cela pour moi.' + 1' – Rikard