2

私はnodejsアプリケーションを書いています。すべてのリクエストを共通の API にルーティングしたいと考えています。そのために私は使用しています

 app.get('*', function(req, res) {
   /* Do Something */
 });

「何かをする」セクションでは、req.route.regexp を取得し、それに基づいて処理を行います。req.route.regexp は、ここに来た正確な URL の正規表現であるはずです。しかし、これを「*」で処理しているため、正規表現では同等の req.route.params が得られません。

したがって、すべてのルートの app.get の req.route.params に基づいて正規表現を取得する方法はありますか (*)。

例: URL は "/:val" です。そのため、正規表現 "/^/(?:([^/]+?))/?$/i" を期待していますが、"* の正規表現を取得しています。 」、それで、どうすればこれを達成できますか?

4

1 に答える 1

3

のハンドラーapp.get('*', ...)が呼び出されたとき、最終的なルートはまだ一致していないため、エクスプレスは後続のルートについて通知できない可能性があります。

私が見る唯一の解決策は、すべてのルートでハンドラーを手動で呼び出すことです。

app.get('/:val', function (req, res) {
   if(!myGlobalHandler(req, res))
     return;
});

function myGlobalHandler(req, res) {
  if(somethingWrong(req)) {
    res.send({error: 'uh oh...'});
    return false;
  }

  return true;
}

ユースケースについて詳しく教えていただければ、もっと洗練された解決策があるかもしれません。

于 2013-01-31T18:35:24.743 に答える