web-dev-qa-db-ja.com

Dynamic Data Express.JSのキャッシュ制御

Json応答でexpress.jsでcach-controllポリシーを設定する方法は?私のjson応答はまったく変わらないので、積極的にキャッシュしたいと思います。静的ファイルでキャッシュする方法を見つけましたが、動的データでキャッシュする方法を見つけることができません。

29
Sayat Satybald

洗練されていない方法は、JSON出力の前にres.set()の呼び出しを追加するだけです。そこで、キャッシュ制御ヘッダーを設定するように指定することができ、それに応じてキャッシュします。

res.set('Cache-Control', 'public, max-age=31557600'); // one year

別のアプローチは、ルートのJSON応答にresプロパティを設定し、フォールバックミドルウェア(エラー処理の前)を使用してJSONをレンダリングおよび送信することです。

app.get('/something.json', function (req, res, next) {
  res.JSONResponse = { 'hello': 'world' };
  next(); // important! 
});

// ...

// Before your error handling middleware:

app.use(function (req, res, next) {
  if (! ('JSONResponse' in res) ) {
    return next();
  }

  res.set('Cache-Control', 'public, max-age=31557600');
  res.json(res.JSONResponse);
})

編集:Express v4のres.setHeaderからres.setに変更

44
Jason

たとえば、次のようにできます。

res.set('Cache-Control', 'public, max-age=31557600, s-maxage=31557600'); // 1 year