137

単一の関数呼び出しでこれを行う方法はありますか?

var todo = function (req, res){};

app.get("/", todo);
app.get("/blabla", todo);
app.get("/blablablabla", todo);

何かのようなもの:

app.get("/", "/blabla", "/blablablabla", todo );

私はこれが構文の混乱であることを知っていますが、私が達成したいことのアイデアを与えるためだけに、ルートの配列は素晴らしいでしょう!

誰でもこれを行う方法を知っていますか?

4

5 に答える 5

160

同じ機能を探しているときに、この質問に出くわしました。

@Jonathan Ong は上記のコメントで、パスに配列を使用することは推奨されていませんが、Express 4 では明示的に説明されており、Express 3.x では機能すると述べています。試してみる例を次に示します。

app.get(
    ['/test', '/alternative', '/barcus*', '/farcus/:farcus/', '/hoop(|la|lapoo|lul)/poo'],
    function ( request, response ) {

    }
);

オブジェクトの内部から、次requestのパスで/hooplul/poo?bandle=froo&bandle=pee&bof=blarg:

"route": {
    "keys": [
        {
            "optional": false, 
            "name": "farcus"
        }
    ], 
    "callbacks": [
        null
    ], 
    "params": [
        null, 
        null, 
        "lul"
    ], 
    "regexp": {}, 
    "path": [
        "/test", 
        "/alternative", 
        "/barcus*", 
        "/farcus/:farcus/", 
        "/hoop(|la|lapoo|lul)/poo"
    ], 
    "method": "get"
}, 

params で何が起こるかに注意してください。現在のリクエストで使用されているかどうかに関係なく、可能なすべてのパスのキャプチャ グループと params を認識しています。

そのため、配列を介して複数のパスを簡単にスタックできますが、パラメーターまたはキャプチャ グループを介して使用されたパスから有用なものを取得したい場合、副作用は予測できない可能性があります。冗長性/エイリアシングにはおそらくより便利であり、その場合は非常にうまく機能します。

編集:以下の @c24w の回答も参照してください。

編集 2: これは適度に人気のある回答です。ほとんどの Node.js ライブラリと同様に、ExpressJS は移動可能な饗宴であることに注意してください。上記のルーティングはまだ機能しますが (私は現在これを使用していますが、非常に便利な機能です)、リクエスト オブジェクトの出力を保証することはできません (これは私が説明したものとは明らかに異なります)。目的の結果が得られるように、慎重にテストしてください。

于 2014-09-26T11:18:48.090 に答える
65
app.get('/:var(bla|blabla)?', todo)

:varreq.param使用しない を設定します。この場合、正規表現を設定するためにのみ使用されます。

(bla|blabla)正規表現を一致するように設定するため、文字列blaおよびblablah.

?正規表現全体をオプションにするため、それも一致/します。

于 2013-03-11T23:56:06.930 に答える
58

あなたが述べたように、実際にパスの配列を渡すことができ、うまく機能します:

var a = ['/', '/blabla', '/blablablabla'];
app.get(a, todo);
于 2013-06-17T19:52:59.063 に答える
42

ケビンの答えを詳しく説明するために、これは4.x ドキュメントからのものです。

ミドルウェア関数が呼び出されるパス。次のいずれかです。

  • パスを表す文字列。
  • パス パターン。
  • パスに一致する正規表現パターン。
  • 上記のいずれかの組み合わせの配列。

次のような例があります。

これは、、、、および で/abcd始まるパスに一致し/xyzaます。/lmn/pqr

app.use(['/abcd', '/xyza', /\/lmn|\/pqr/], function (req, res, next) {
  next();
});
于 2016-06-02T16:01:39.130 に答える
17

私は行きました:

['path', 'altPath'].forEach(function(path) {
  app.get(path, function(req, res) { etc. });
});
于 2016-11-30T22:18:16.620 に答える