/ / Regex per la corrispondenza del percorso in Express - regex, node.js, express

Regex per la corrispondenza delle rotte in Express - regex, node.js, express

Non sono molto bravo con le espressioni regolari, quindi voglio assicurarmi di farlo correttamente. Diciamo che ho due percorsi molto simili, /discussion/:slug/ e /page/:slug/. Voglio creare un percorso che corrisponda a entrambe queste pagine.

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

È questo il modo corretto di farlo? In questo momento sto solo creando due percorsi separati.

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

risposte:

99 per risposta № 1

app.get("/:type(discussion|page)/:id", ...) lavori


54 per risposta № 2

Dovresti usare un oggetto letterale di espressione regolare javascript, non una stringa, e @sarnold ha ragione a dire che vuoi alternare le parentesi. Le parentesi quadre sono per le classi di caratteri.

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

Il (.+) significa che deve essere presente una lumaca di almeno 1 carattere o che questa rotta non corrisponderà. Uso (.*) se vuoi che corrisponda anche a una lumaca vuota.