Ответ 1
Используйте регулярное выражение вместо строки.
app.get(/^\/(.+)/, function(req, res) {
var href = req.params[0]; // regexp numbered capture group
});
Обратите внимание: вы не можете использовать синтаксис строки (app.get('/:href(.+)')
), потому что Express разрешает только небольшое подмножество регулярных выражений в строках маршрута и использует эти регулярные выражения как условную проверку для этого конкретного компонента маршрута. Он не фиксирует согласованный контент в условном выражении и не позволяет вам сопоставлять компоненты (части URL, разделенные косой чертой).
Например:
app.get('/:compa([0-9])/:compb([a-z]/')
Этот маршрут соответствует только если первый компонент (compa) - это одна цифра, а второй компонент (compb) - это одна буква a-z.
'/:href(.+)'
говорит, что "соответствует первому компоненту, только если контент - это что-то", что не имеет особого смысла; что поведение по умолчанию в любом случае. Кроме того, если вы исследуете источник, вы увидите, что Express фактически заставляет точку в этом условном быть литералом.
Например, app.get('/:href(.+)')
фактически компилируется в:
/^\/(?:(\.+))\/?$/i
Обратите внимание, что ваш .
был экранирован, поэтому этот маршрут будет соответствовать только одному или нескольким периодам.