俺、サービス売って家買うんだ

Swift, Kotlin, Vue.js, 統計, GCP / このペースで作ってればいつか2-3億で売れるのがポっと出来るんじゃなかろうか

【Node.js】 requireで読み込まれたファイルのキャッシュを削除する

f:id:ie-kau:20161103231112p:plain


以下のExpressを利用したコードでjsonを返す。この時data.jsonは他の処理によって随時更新され、その反映をレスポンスに乗せたい。
本来ならアクセスされる度にその更新の反映がレスポンスのjsonに現れてほしいのだがNodeのrequireの仕組み上、無駄なファイルのI/Oを発生させないためにメモリ上に読み込んだファイルをキャッシュするようになっているのでプロセスを再起動するまでファイルの更新が反映されない。

app.get('/json', (req, res) => {
  const data = require(`${__dirname}/data.json`);
  res.json(data);
});

上記の仕組みを回避してファイルの更新をレスポンスに反映するには、require.cacheオブジェクト内のキャッシュをdeleteしてやるとよい。

app.get('/json', (req, res) => {
  const jsonFilePath = `${__dirname}/data.json`
  const json = require(jsonFilePath);
  delete require.cache[require.resolve(jsonFilePath)];
  res.json(json);
});