Użyj wyrażenia regularnego zamiast ciągu.
app.get(/^\/(.+)/, function(req, res) {
var href = req.params[0]; // regexp's numbered capture group
});
Należy pamiętać, że nie można używać składni ciągu (app.get('/:href(.+)')
), ponieważ Express umożliwia tylko niewielki podzbiór wyrażeń regularnych w ciągi tras i używa tych wyrażeń regularnych jako test warunkowego dla że danego składnika trasy. Nie przechwytuje dopasowanej treści w trybie warunkowym, ani nie pozwala na dopasowanie elementów (części adresu URL oddzielone ukośnikami).
Na przykład:
app.get('/:compa([0-9])/:compb([a-z]/')
Trasa ta pasuje tylko jeśli pierwszy składnik (Compa) jest pojedynczą cyfrą, a drugi składnik (compb) jest pojedynczą literą A-Z.
mówi "dopasuj pierwszy komponent tylko, jeśli treść jest cokolwiek", co nie ma większego sensu; to jest domyślne zachowanie. Dodatkowo, jeśli przeanalizujesz the source, zobaczysz, że Express wymusza na kropce pod tym warunkiem, że jest dosłowny.
Na przykład app.get('/:href(.+)')
faktycznie kompiluje się:
/^\/(?:(\.+))\/?$/i
zauważyć, że .
została uciekł, więc ta trasa będzie tylko dopasować jedną lub więcej okresów.
Próbuję 'app.get ('/: href (. +)', ...' bez powodzenia Co ja brakuje? –
Nie sądzę, że można przekazać wyrażenie regularne wewnątrz ciągu trasy Musisz przekazać obiekt regexp, zobacz [moja odpowiedź] (http://stackoverflow.com/a/14915608/201952). – josh3736
To: http://stackoverflow.com/a/12334009/8446 oznacza, że może ... –