77

我对正则表达式不是很好,所以我想确保我正确地做到了这一点。假设我有两条非常相似的路线,/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)
4

2 回答 2

123

app.get('/:type(discussion|page)/:id', ...)作品

于 2012-12-02T00:48:04.420 回答
70

您应该使用文字 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);

(.+)意味着必须存在至少 1 个字符的 slug,否则此路由将不匹配。(.*)如果您希望它也匹配一个空的蛞蝓,请使用它。

于 2012-06-01T23:56:31.417 回答