web-dev-qa-db-ja.com

高速ルートのパラメーター条件

Expressアプリには次のようなルートがあります:

app.get('/:id', function (request, response) {
  …
});

IDは常に数字になります。ただし、現時点では、このルートは/loginなどの他のものと一致しています。

私はこれから2つのことをしたいと思う:

  1. iDが数字の場合にのみこのルートを使用します。
  2. その特定のパラメーターのルートが既に定義されていない場合のみ(/loginとの衝突など)。

これはできますか?

64
user1082754

マリウスの答えを拡張して、正規表現とパラメーター名を提供できます。

app.get('/:id(\\d+)/', function (req, res){
  // req.params.id is now defined here for you
});
126
danmactough

はい、チェックアウト http://expressjs.com/guide/routing.html および https://www.npmjs.com/package/path-to-regexp (どのエクスプレス使用)。動作する可能性のあるテストされていないバージョンは次のとおりです。

app.get(/^(\d+)$/, function (request, response) {
  var id = request.params[0];
  ...
});
12
Marius Kjeldahl

次を使用できます。

// /12345
app.get(/\/([^\/]+)\/?/, function(req, res){
  var id = req.params[0];
  // do something
});

またはこれ:

// /post/12345
app.get(/\/post\/([^\/]+)\/?/, function(req, res){
  var id = req.params[0];
  // do something
});
3
Marco Godínez