我希望我的服务器在节点退出时保存一些基本数据并在下次加载它们。
我尝试了this question建议的答案,但服务器似乎在它能够写入文件之前关闭。
这是我正在尝试的确切代码:
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}));
答案 0 :(得分:2)
我认为如果您尝试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的同步版本,您将强制进程在退出之前完成所有操作。