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 回答