単なるメモなので短いです
終了時にデータを保存したい
僕は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の同期関数を使いましょう。