1. ホーム
  2. node.js

[解決済み] express.js - 複数のルートを一行で処理するルーティングハンドラ

2022-06-18 23:19:24

質問

これを1回の関数呼び出しで作る方法はないでしょうか?

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

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

みたいな感じ。

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

これは構文がめちゃくちゃですが、私が実現したいことのイメージを与えるために、ルートの配列があれば最高です!

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

どのように解決するのですか?

私は同じ機能を探しているときに、この質問に遭遇しました。

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 で何が起こるかに注意してください。現在のリクエストで使われているかどうかに関わらず、すべての可能なパスにおけるキャプチャグループとパラメータを認識します。

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

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

編集2:これは中々人気のある回答です。ExpressJSは、ほとんどのNode.jsライブラリと同様に、移動可能なごちそうであることを心に留めておいてください。上記のルーティングはまだ動作しますが(私は現在それを使用しており、非常に便利な機能です)、私はリクエストオブジェクトの出力を保証することはできません(それは私が説明したものとは確かに異なっています)。望む結果を得るために慎重にテストしてください。