/ / Regex для відповідності маршруту в Express - regex, node.js, express

Regex для узгодження маршрутів в Express - regex, node.js, express

Я не дуже хороший з регулярними виразами, тому хочу переконатися, що роблю це правильно. Скажімо, я маю два дуже схожі маршрути, /discussion/:slug/ і /page/:slug/. Я хочу створити маршрут, який відповідає обом цим сторінкам.

app.get("/[discussion|page]/:slug", function(req, res, next) {
...enter code here...
})

Це правильний спосіб зробити це? Зараз я просто створюю два окремі маршрути.

someFunction = function(req, res, next) {..}
app.get("/discussion/:slug", someFunction)
app.get("/page/:slug", someFunction)

Відповіді:

99 за відповідь № 1

app.get("/:type(discussion|page)/:id", ...) працює


54 за відповідь № 2

Ви повинні використовувати буквальний об’єкт регулярного вираження JavaScript, а не рядок, і @sarnold вірно, що ви хочете, щоб вам потрібні пароні для чергування. Квадратні дужки призначені для класів символів.

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);

The (.+) означає, що муляж має бути принаймні 1 символом або цей маршрут не збігатиметься. Використовуйте (.*) якщо ви хочете, щоб він також відповідав порожньому слизу.