LoginSignup
10

More than 5 years have passed since last update.

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

Posted at

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

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

僕は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の同期関数を使いましょう。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10