Ich bin nicht sehr gut mit regulären Ausdrücken, deshalb möchte ich sicherstellen, dass ich das richtig mache. Nehmen wir an, ich habe zwei sehr ähnliche Routen /discussion/:slug/
und /page/:slug/
. Ich möchte eine Route erstellen, die diesen beiden Seiten entspricht.
app.get('/[discussion|page]/:slug', function(req, res, next) {
...enter code here...
})
Ist das der richtige Weg? Im Moment erstelle ich nur zwei separate Routen.
someFunction = function(req, res, next) {..}
app.get('/discussion/:slug', someFunction)
app.get('/page/:slug', someFunction)
[]
Klammern abwechselnd verwendet werden? Das wäre das erste Mal, dass ich sie so gesehen habe. (Parens()
sind häufiger in mehr Werkzeugen - ich kenne Ihr spezifisches Werkzeug einfach nicht.)Antworten:
app.get('/:type(discussion|page)/:id', ...)
funktioniertquelle
:type(<regex>)
wirdreq.params.type
auf die übereinstimmende Zeichenfolge gesetzt. Sie können die Regex nicht vor die Variable setzen.path-to-regexp
Modul dokumentiert , das Express verwendet. (Dies wird in den Express-Dokumenten erwähnt, ist aber leicht zu übersehen.) Siehe github.com/pillarjs/path-to-regexpcase sensitive
jedochfalse
standardmäßig eingestellt zu sein . Kann ich es auf true setzen? Dies scheint der offizielle WegSie sollten ein wörtliches Javascript-Objekt mit regulärem Ausdruck verwenden, keine Zeichenfolge, und @sarnold ist richtig, dass Sie Parens für den Wechsel wünschen. Eckige Klammern stehen für Zeichenklassen.
const express = require("express"); const app = express.createServer(); app.get(/^\/(discussion|page)\/(.+)/, function (req, res, next) { res.write(req.params[0]); //This has "discussion" or "page" res.write(req.params[1]); //This has the slug res.end(); }); app.listen(9060);
Das
(.+)
bedeutet, dass ein Slug mit mindestens 1 Zeichen vorhanden sein muss, sonst stimmt diese Route nicht überein. Verwenden(.*)
Sie diese Option, wenn Sie möchten, dass sie auch zu einer leeren Schnecke passt.quelle
app.get(new RegExp('(your|string)\/here'), function…
/^\/(discussion|page)\/(.+)/
wie vom Benutzer oben vorgeschlagen sein. Ich habe eine Bearbeitung vorgeschlagen.