101

現在、ユーザーが各リクエストのヘッダーで認証トークンを渡す必要がある API を作成しています。これで、キャッチオールルートを作成できることがわかりました

app.get('/*', function(req,res){

});

しかし、またはなどの特定のルートを除外するようにするにはどうすればよいのでしょう/login/?

4

5 に答える 5

54

除外したいルートの後にいつでもキャッチオールルートを配置できます(robertklepの回答を参照)。

しかし、ルートの順序を気にしたくない場合もあります。この場合、あなたはまだあなたが望むことをすることができます:

app.get('*', function(req, res, next) {
  if (req.url === '/' || req.url === '/login') return next();
  ...
});
于 2013-10-11T10:16:31.443 に答える
27

すべてのリクエストで資格情報または信頼性を検証する場合は、Express Routing 機能の "all" を使用する必要があります。次のように使用できます。

app.all('/api/*', function(req, res, next){
    console.log('General Validations');
    next();
});

ルーティングの前に配置できます。

この場合、パスとして「/api/」を使用したことに注意してください。必要に応じて「/」を使用できます。

ここで誰かを助けるのに遅すぎないことを願っています。

于 2015-10-21T17:47:53.760 に答える
12

キャッチオール ルート ハンドラーを作成する別の方法は次のとおりです。

app.get('/login', function(req, res) {
  //... login page
});
app.get('/', function(req, res) {
  //...index page
});
app.get('/:pageCalled', function(req, res) {
  console.log('retrieving page: ' + req.params.pageCalled);
  //... mypage.html
});

これは robertklep の (受け入れられた) 回答とまったく同じように機能しますが、ユーザーが実際に要求した内容に関する詳細情報が得られます。これで、要求されているページを表すスラッグreq.params.pageCalledができ、複数の異なるページがある場合にユーザーを適切なページに誘導できます。

このアプローチで気をつけなければならない点 (thx @agmin) は/:pageCalled、1 つのルートのみをキャッチするため、 など/は取得されません。より多くのページの/route/1ように追加のスラッグを使用/:pageCalled/:subPageCalledします (thx @softcode)。

于 2014-04-09T00:14:11.863 に答える