在 Node.js 退出之前写入 .txt 文件

use*_*713 5 javascript text exit writefile node.js

我希望我的服务器在节点退出时保存一些重要数据并在下次加载它们。

我尝试了这个问题的答案所建议的内容,但服务器似乎在能够写入文件之前关闭了。

这是我正在尝试的确切代码:

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}));
Run Code Online (Sandbox Code Playgroud)

小智 7

我想如果你尝试一下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
}
Run Code Online (Sandbox Code Playgroud)

我认为这个问题是由于异步性质造成的。通过使用 writeFile 的同步版本,您将强制进程在退出之前完成所有操作。