単一の関数呼び出しでこれを行う方法はありますか?
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で何が起こるかに注意してください:現在のリクエストで使用されているかどうかにかかわらず、可能なすべてのパスのキャプチャグループとパラメータを認識します。
したがって、配列を介した複数のパスのスタックは簡単に実行できますが、paramsまたはキャプチャグループを介して使用されたパスから有用なものを選択したい場合、副作用はおそらく予測不可能です。おそらく冗長性/エイリアシングに役立つでしょう。その場合、非常にうまく機能します。
編集:@ c24wの答え 下 もご覧ください。
編集2:これは適度に人気のある答えです。 ExpressJSは、ほとんどのNode.jsライブラリと同様に、移動可能なごちそうであることに留意してください。上記のルーティングは引き続き機能しますが(現時点では非常に便利な機能です)、リクエストオブジェクトの出力を保証することはできません(説明した内容とは確かに異なります)。慎重にテストして、目的の結果が得られることを確認してください。
app.get('/:var(bla|blabla)?', todo)
:var
は、使用しないreq.param
を設定します。この場合、正規表現を設定するためにのみ使用されます。
(bla|blabla)
は正規表現を一致するように設定するため、文字列bla
およびblablah
と一致します。
?
は正規表現全体をオプションにするため、/
にも一致します。
あなたが実際にパスの配列を渡すことができます、あなたが言ったように、それは素晴らしい動作をします:
var a = ['/', '/blabla', '/blablablabla'];
app.get(a, todo);
Kevin's answer について詳しく説明するために、これは 4.x docs からのものです。
ミドルウェア関数が呼び出されるパス。次のいずれかです。
- パスを表す文字列。
- パスパターン。
- パスに一致する正規表現パターン。
- 上記のいずれかの組み合わせの配列
次のような 例 があります。
これは、
/abcd
、/xyza
、/lmn
、および/pqr
で始まるパスに一致します。app.use(['/abcd', '/xyza', /\/lmn|\/pqr/], function (req, res, next) { next(); });
私はに行きました:
['path', 'altPath'].forEach(function(path) {
app.get(path, function(req, res) { etc. });
});
元のルートのファイルが必要で、このように新しいルートを定義します
var user = require('./users');
router.post('/login', user.post('/login'));