2014-12-09 4 views
3
var express = require('express'); 
var tracker = require('../lib/pixel-track') 
var router = express.Router(); 

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

router.get(/^\/(([0-9a-zA-Z\._-])+.(gif|GIF))$/, tracker.requestHandler); 

module.exports = router; 

У меня есть этот экспресс-маршрутизатор. Согласно моей логике, этот второй оператор соответствует любому запросу `/whatever.gif, а первый - только для /. По какой-то причине запросы на/по-прежнему отправляют gif. Я немного смущен тем, как обработчик маршрута регулярных выражений взял на себя обработчик указателя маршрута.Регулярное перемещение по экспресс-маршруту по умолчанию по умолчанию

Интересно, что у меня есть тот же маршрут и код отслеживания регулярных выражений в местоположении/api, и он отлично работает, а не переопределяет индекс. Кроме того, если я прокомментирую router.get ('/' ... route, он все равно отображает пиксель на localhost: 4000

ответ

1

Я бы сделал это, не используя непосредственно модуль маршрутизатора. Не уверен, что вы целью с использованием его таким образом

Вам также не нужен такой сложный регулярное выражение:

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

/* GET home page. */ 
app.get('/', function(req, res) { 
    console.log("got /"); 
    res.end("/"); 
}); 

app.get(/^\/[\w-.]+\.gif$/i, function(req, res) { 
    console.log("got gif"); 
    res.end("a gif!"); 
}); 

app.listen(8000); 

Update

Лучшее, что я могу сказать, причина это не обрабатывает свой первоначальный маршрут ваш код, потому что в вашем репо, api var (путь к индексному файлу) равен var api = require('./routes/api/index');, тогда как ваш индекс установлен в indexRoute, и вы не используете его нигде. Помните, что в маршрутах, путь определяется в app.use трактуются как базовый путь, так:

Предполагая, что вы имели это в вашем app.js:

var indexRoute = require('./routes/index'); 
var api = require('./routes/api/index'); 
app.use('/', indexRoute); 
app.use('/api', api); 

И эти обработчики маршрута:

// /routes/api/index.js 
router.get('/', function(req, res) { 
    res.send('You called api route /'); 
}); 

// /routes/index.js 
router.get('/', function(req, res) { 
    res.send('You called index route /'); 
}); 
router.get(/^\/[\w-.]+\.gif$/i, function(req, res) { 
    res.end("a gif!"); 
}); 

Это, кажется, работает на меня (хотя app.use(express.static(path.join(__dirname, 'public'))); блокировал маршрут /!).

+0

Я переместил его в маршрутизатор, потому что изначально я получил его в приложении после приложения-приложения router app.use ('/' ... Мне было интересно, изменит ли его перенос на маршрутизатор. первое регулярное выражение, которое я когда-либо писал ха-ха, и мне нужно получить часть информации из запроса gif, поэтому мне нужны были некоторые ((('s. Но будет ли сложность регулярного выражения с маршрутом? Я не уверен, что это ответы Это маршрутизатор - это всего лишь один файл приложения. Я просто смущен, почему этот маршрут перегружен по умолчанию, который появляется перед ним, не менее. Мне интересно, почему/request не служит индексу. – dkran

+0

Я буду следить, когда я вернусь домой сегодня и попробую это. Я также пробовал его за пределами маршрута с помощью app.get (... как вы показали, поэтому я не думаю, что просто переключить его на экземпляр приложения из экземпляр маршрутизатора исправит его. Может ли это быть реальной ошибкой? PS: https://github.com/dkran/pixel - это код – dkran

+0

недостающих зависимостей и ошибка при поломке? Я обновился до новой версии экспресс, по-прежнему не загружаюсь/маршрутизируется по запросу. Я пытаюсь сделать это как на ubuntu, так и на osx с nodemon. Все, что он делает, это загрузить пиксели на/или /anything.gif, я не могу получить индекс для рендеринга. Думаю, я буду копать дальше. Я не знаю, почему это работает для вас, а не для меня. – dkran

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