2015-03-11 7 views
19

Nie jestem pewien, czy jest to błąd w Expressie, czy też robię coś nie tak (prawdopodobnie to drugie), ale stwierdzam, że wymagane .params zachowuje parametry tylko w ostatnim kroku żądania. W celu wykazania, co mam na myśli:Express Router niezdefiniowane parametry z routerem.use po podzieleniu na pliki

przykład roboczych:

router.get('/:id/test', function(req, res){ 
    // req.params.id is not undefined 
}); 

nie działa :(

Plik 1:

router.use('/:id', require('./file2')); 

Plik 2:

router.get('/test', function(req, res){ 
    // req.params.id is undefined?! 
}); 

... Teraz powyższe wydaje się zupełnie nielogiczne mi się, widząc jak generator ekspresowe wyznacza trasy w powyższy sposób - i musi jeszcze zostać określone w drodze gdzieś. Z pewnością nadal powinienem mieć dostęp do "id"?

W zasadzie brakuje mi czegoś? Czy jest to zamierzone/czy jest udokumentowane? FWIW Używam Express v4.12.0.

Nota prawna: sprawa z plikiem jest prawdopodobnie nieistotna, ale lepiej być bezpiecznym niż żałować.

Odpowiedz

29

Po utworzeniu Router w File 2, musisz powiedzieć, aby dziedziczył params od rodziców.

var router = express.Router({mergeParams: true}); 

http://expressjs.com/api.html#router

+0

Bah, wiedziałem, że będzie to coś proste, że spojrzałem na drugą. Zaskoczony, że nigdy nie wpadłem na to wcześniej ... Dzięki za podpowiedź;) – whitfin

+0

Byłem w stanie to osiągnąć jedynie dodając '{mergeParams: true}' również w moim głównym pliku (Express 4.13.4). Edytowano odpowiedź, ponieważ niektóre osoby mogą jej potrzebować. – George

Powiązane problemy