Wie kann ich zulassen, Schrägstriche in meiner Express-Routen?
Ich bin versucht zu implementieren, permalinks, in form /2013/02/16/title-with-hyphens
. Ich möchte die Parameter der route. Wenn ich versuche den folgenden Weg:
app.get('/:href', function(req, res) { });
...dann bekomme ich eine 404, vermutlich, weil Express ist nur auf der Suche nach einem parameter, und denkt, dass es 4.
Kann ich es umgehen mit /:y/:m/:d/:t
, aber diese Kräfte meine permalinks werden in dieser form dauerhaft.
Wie bekomme ich die Parameter der route zu gehören Schrägstriche?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie einen regulären Ausdruck anstelle eines string.
Beachten Sie, dass Sie nicht verwenden die string-syntax (
app.get('/:href(.+)')
), weil Express erlaubt nur eine kleine Teilmenge der regulären Ausdrücke in route strings, und es verwendet die regulären Ausdrücke, die als bedingtes check für die jeweilige Komponente der route. Es erfasst nicht die abgestimmten Inhalte in das bedingte, noch wird es Ihnen ermöglichen, zu entsprechen, die von den verschiedenen Komponenten (Teile der URL, getrennt durch Schrägstriche).Beispiel:
Diese route nur entspricht, wenn die erste Komponente (compa) eine einzelne Ziffer ist, und die zweite Komponente (compb) ist einem einzigen Buchstaben von a-z.
'/:href(.+)'
sagt "match der ersten Komponente nur, wenn die Inhalte nichts", das macht nicht viel Sinn; das ist das Standard-Verhalten sowieso. Darüber hinaus, wenn Sie untersuchen die Quelle, wirst du sehen, dass Express ist tatsächlich zwingen, den Punkt in das bedingte zu sein-literal.Beispielsweise
app.get('/:href(.+)')
wirklich kompiliert in:Feststellen, dass Ihre
.
entgangen war, so dass diese route nur mit ein oder mehrere Perioden.Scheint es, dass
app.get("/:href(*)", ...)
funktioniert gut (zumindest im Express-4). Sie erhalten Ihren Wertreq.params.href
.Wird es auch ausgelöst werden, durch
/
Strecke, das ist wahrscheinlich nicht das, was Sie wollen. Sie können dies vermeiden, indem Sieapp.get('/', ...)
an anderer Stelle in Ihrer app oder explizit die Prüfung für eine leere Zeichenfolge.Können Sie dies mit regex routing
Ich weiß nicht, ob die regex richtig ist, aber Sie bekommen die Idee
EDIT:
Ich glaube nicht, dass die oben genannten arbeiten, aber das bedeutet
Werde
http://localhost:3000/2012/08/05/hello-i-must-be
yeildsreq.params = [ '2012', '08', '05', 'hello-i-must-be' ]
app.get('/:href(.+)', ...
mit kein Glück. Was bin ich?