Как я могу разрешить косые черты в моих экспресс-маршрутах?

Я думаю, что вам нужно \Q$5\E. Также см. Pattern.quote(s), введенные в Java 5.

S Шаблон javadoc для деталей.

24
задан Dukeling 16 February 2013 в 21:59
поделиться

2 ответа

Используйте регулярное выражение вместо строки.

app.get(/^\/(.+)/, function(req, res) {
    var href = req.params[0]; // regexp's numbered capture group
});

Обратите внимание, что вы не можете использовать синтаксис строки (app.get('/:href(.+)')), поскольку Express допускает только небольшое подмножество регулярных выражений в строках маршрута и использует эти регулярные выражения в качестве условной проверки для этот конкретный компонент маршрута. Он не захватывает сопоставляемое содержимое в условных выражениях и не позволяет сопоставлять компоненты (части URL, разделенные косой чертой).

Например:

app.get('/:compa([0-9])/:compb([a-z]/')

Этот маршрут совпадает только в том случае, если первый компонент ( compa ) представляет собой одну цифру, а второй компонент ( compb ) это одна буква az.

'/:href(.+)' говорит: «сопоставлять первый компонент, только если контент является чем-то», что не имеет особого смысла; это поведение по умолчанию в любом случае. Кроме того, если вы изучите источник , вы увидите, что Express фактически заставляет точку в этом условном выражении быть буквальной.

Например, app.get('/:href(.+)') фактически компилируется в:

 /^\/(?:(\.+))\/?$/i

Обратите внимание, что ваш . сбежал, поэтому этот маршрут будет соответствовать только одному или нескольким периодам.

28
ответ дан josh3736 16 February 2013 в 21:59
поделиться

Вы можете сделать это с помощью маршрутизации регулярных выражений

app.get('/:href(\d+\/\d+\/\d+\/*)', function(req, res) { });

Я не знаю, правильное ли регулярное выражение, но вы поняли идею

ПРАВКА:

I не думаю, что вышеупомянутое работает, но это делает

app.get(/^\/(\d+)\/(\d+)\/(\d+)\/(.*)/, function(req, res) { });

Переход к http://localhost:3000/2012/08/05/hello-i-must-be доходам req.params = [ '2012', '08', '05', 'hello-i-must-be' ]

1
ответ дан Benoir 16 February 2013 в 21:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: