4

ノードが終了したときにサーバーにいくつかの重要なデータを保存して、次回ロードするようにしたいと思います。

この質問の回答が示唆することを試しましたが、ファイルに書き込む前にサーバーが閉じているようです。

これは私が試している正確なコードです:

process.stdin.resume();

function exitHandler(options, err) {
    if(!serverUp){return;}
    serverUp = false;
    fs.writeFile('server.txt', String(search_index),function (err) {
        console.log("debug") // <-- This doesn't happen
        process.exit();
    });   
}

//do something when app is closing
process.on('exit', exitHandler.bind(null,{cleanup:true}));

//catches ctrl+c event
process.on('SIGINT', exitHandler.bind(null, {exit:true}));

//catches uncaught exceptions
process.on('uncaughtException', exitHandler.bind(null, {exit:true}));
4

1 に答える 1

5

試してみれば解決すると思いますfs.writeFileSync

https://nodejs.org/api/fs.html#fs_fs_writefilesync_filename_data_options

コードは次のようになります。

function exitHandler(options, err) {
    if(!serverUp){return;}
    serverUp = false;
    fs.writeFileSync('server.txt', String(search_index));
    console.log("debug");
    process.exit();   // Don't think you'll need this line any more
}

私が信じている問題は、非同期の性質によるものです。writeFile の同期バージョンを使用することで、終了する前にプロセスがすべての実行を終了するように強制します。

于 2015-06-11T12:49:16.893 に答える