77

私は正規表現があまり得意ではないので、これが正しく行われていることを確認したいと思います。/discussion/:slug/非常によく似たルートが2つあるとしましょう/page/:slug/。これらの両方のページに一致するルートを作成したいと思います。

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

これは正しい方法ですか?現在、2つの別々のルートを作成しています。

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 文字のスラッグが存在する必要があることを意味します。存在しない場合、このルートは一致しません。(.*)空のスラッグにも一致させたい場合に使用します。

于 2012-06-01T23:56:31.417 に答える