2015-12-15 4 views
0

Все:маршрутизации приоритет запутать о Экспресс

Я довольно новыми для Express.js, скажем, если я указываю маршруты как:

var routes = require('./routes/index'); 
app.use('/', routes); 
app.get('/hello', function(req, res){res.send("hello");}); 

внутри index.js, я набор маршрутизации, как:

/* GET home page. */ 
router.get('/hello', function(req, res, next) { 
    res.render('index', { title: 'Express' }); 
}); 

module.exports = router; 

Кажется, что оба дескриптора одинаковы с запросом URL, интересно, как Express принимает решение о том, какой обработчик использовать?

Благодаря

+0

Когда вы используете app.get ('/ hello', ___), это означает, что вы устанавливаете промежуточное программное обеспечение, которое будет выполняться перед любым запросом, сделанным для '/ hello'. поэтому первый app.get будет использоваться, а print «hello» & router.get никогда не будет называться, поскольку app.get завершает ответ с помощью «привет». – rroxysam

+0

@rroxysam Спасибо, однако, когда я его протестировал, я не знаю, почему он попал в router.get() – Kuan

ответ

1

Все маршруты и промежуточное программное в экспрессе укладываются и выполняются сверху вниз.

router.get('/hello', (req, res) => { 
    res.send('This get executed'); 
}); 
router.get('/hello', (req, res) => { 
    res.send('This will NOT get executed since you are ending the response with res.send in the route above'); 
}); 
+0

Спасибо, так что, когда дело доходит до моего дела, которое нужно выполнить первым и почему? – Kuan

+0

Правило Layman - что вы когда-либо видите в своем редакторе, выполняется. –

+0

Спасибо, поэтому обработчик внутри app.use ("/", __) становится первым. – Kuan

Смежные вопросы