2016-01-12 3 views
0

Рассмотрим это небольшое приложение:Почему `app.get ('*')` всегда срабатывает?

var express = require("express"); 
var app = express(); 

app.get("/json", function(req, res){ 
    console.log("JSON route"); 
    res.json({foo: "bar"}); 
}); 

app.get("/", function(req, res){ 
    console.log("Slash route"); 
    res.send("Hello"); 
}); 

app.get("*", function(req, res){ 
    console.log("Star route"); 
    res.redirect("/"); 
}); 

app.listen(3000, function(){ 
    console.log("Listening."); 
}); 

Всякий раз, когда я иду либо localhost:3000 или localhost:3000/json в моем браузере, я могу видеть из моего журнала сервера, что маршрут звезда * также срабатывает. Это верно, если оно изменено на app.get("/*")

Почему это? Я думал, res.send и res.json приостановлено исполнение.

+0

Ты сейчас в браузере, не так ли? ваш браузер, вероятно, запрашивает значок. –

+0

@KevinB Сын пистолета. Если вы опубликуете это в качестве ответа, я буду удивлять его! – RobertAKARobin

ответ

2

Когда вы запрашиваете что-то в своем браузере, оно автоматически попытается запросить значок. Поскольку у вашего сервера нет маршрута, определенного для значка, он переходит на маршрут *, вызывая это замешательство.

+2

Может стоить 'console.log (req.url);' если вы хотите увидеть, что попадает в маршрут '*'. – csum

+0

Спасибо! Это было настолько усугубляющим. – RobertAKARobin