1

私は接続ミドルウェアを使用しておりrouter、以下のような複数の機能を持っています

var server = connect()
  .use(connect.cookieParser("secret"))
  .use(connect.session({secret: 'keyboard cat',cookie: { maxAge: 60000 }}))
  .use('/somepath', connect.static(__dirname + '/somepath'))
  .use('/_someapi', function (req, res) {
      // do something
  })
  .use(function (req, res) { // default case router
      // do something
  })
  .listen(8080)

私の問題は、 をリクエストしても/_someapi、その関数を実行した後、 nextrouterが呼び出されることです。どうしたら防げるのか知りたいです。つまり、リクエストがすでに処理されている場合、次のルーターはそれを処理しようとしないはずです。

false関数から戻っres.end('');ても役に立ちません。

4

1 に答える 1

0

ここでの問題は、それらが実際にはミドルウェアをトリガーする異なる要求である可能性があることです。

これを確認するには: console.log(req.url). 最も厄介な問題はfavicon.ico、ブラウザーが実際に常に要求していることを知らないと、多くの頭痛の種になることです。

favicon.ico が不要な RESTful API またはその他の同様のアプリケーションを開発している場合は、このミドルウェアを最初の 1 つとして使用してください。

app.use(function(req, res, next) {
  if (req.url != '/favicon.ico') {
    return next();
  } else {
    res.status(200);
    res.header('Content-Type', 'image/x-icon');
    res.header('Cache-Control', 'max-age=4294880896');
    res.end();
  }
});

これは 200 と非常に長いキャッシュ寿命で応答するため、ブラウザはそれを再度呼び出すことはありません。

また、明確にするために、または他のルーティングソリューションの.use代わりに使用する必要がありますか?.get

于 2013-08-30T12:31:44.727 に答える