1. ホーム
  2. node.js

[解決済み] Express-jsのワイルドカードルーチングで、パス以下とパスを含むすべてをカバーする。

2022-09-18 05:08:57

質問

1つのルートで、以下のすべてをカバーしようとしています。 /foo を含む /foo そのものです。私は /foo* を使ってみましたが、これはすべてに対して機能します。 を除いて にはマッチしません。 /foo . 観察してください。

var express = require("express"),
    app = express.createServer();

app.get("/foo*", function(req, res, next){
  res.write("Foo*\n");
  next();
});

app.get("/foo", function(req, res){
  res.end("Foo\n");
});

app.get("/foo/bar", function(req, res){
  res.end("Foo Bar\n");
});

app.listen(3000);

出力します。

$ curl localhost:3000/foo
Foo
$ curl localhost:3000/foo/bar
Foo*
Foo Bar

私のオプションは何でしょうか?私が思いついたベストは /fo* をルーティングすることです。もちろん、これはあまりに多くのマッチングを行うため、あまり最適ではありません。

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

2つのルートを持つ必要があると思います。コネクタルータの331行目を見ると、パスの*は.+に置き換えられているので、1文字以上とマッチします。

https://github.com/senchalabs/connect/blob/master/lib/middleware/router.js

同じアクションを実行する2つのルートがある場合、次のようにしてそれを維持することができます。 DRY .

var express = require("express"),
    app = express.createServer();

function fooRoute(req, res, next) {
  res.end("Foo Route\n");
}

app.get("/foo*", fooRoute);
app.get("/foo", fooRoute);

app.listen(3000);