Posted at

Node.jsで終了時にファイル保存する

More than 1 year has passed since last update.

単なるメモなので短いです


終了時にデータを保存したい

僕はNode.jsでsocket.ioを扱うプログラムをよく書いているのですが、プログラム終了用のイベントとかは特に実装せずに、終了したくなったときはCtrl+Cで終了させています。その終了したときにデータを保存したかったので、そのやり方です。


テスト用ソースコード

var fs = require("fs");

var saveData = {}

process.on("exit", function() {
console.log("Exitting...");
saveData["date"] = new Date();
var json = JSON.stringify(saveData, null, " ");
fs.writeFileSync("savedata.json", json);
console.log("Saved!");
})
process.on("SIGINT", function () {
process.exit(0);
});

setInterval(function(){}, 10000);

多分Node.jsでプログラム終了時に処理を行いたくてgoogle先生に教えを請うと、process.onでexitシグナルを受け取る方法が出てくると思います。

この方法だと、process.exitで終了した時や、プログラムがエラーで終了したときのイベントは受け取れるのですが、Ctrl+Cで終了した際は呼ばれません。

なので、さらにprocess.onでSIGINTシグナルを受け取り、その中でprocess.exitをしてやることにより、Ctrl+Cで終了してもexitシグナルを受け取ることができます。

あとはexitシグナルのリスナー内に保存する処理を書けばいいです。

exitシグナルのリスナー内では非同期関数は使えないので、ファイルを書き込むときはfs.writeFileSyncの同期関数を使いましょう。