Nodemon在每次重启之前执行函数

4
我有一个Node.js游戏服务器,通过运行nodemon app.js启动。现在,每当我编辑文件时,服务器就会重新启动。我已经实现了保存和加载功能,并且希望每次游戏服务器由于文件更改而重新启动时,在重新启动之前保存游戏状态,以便重启后可以加载先前的状态。
我想要的是这样的东西:
process.on('restart', function(doneCallback) {
   saveGame(doneCallback);
   // The save game is async because it is writing toa file
}

我尝试使用SIGUR2事件,但它从未被触发。这是我的尝试,但该函数从未被调用。

// Save game before restarting
process.once('SIGUSR2', function () {
     console.log('SIGUR2');
     game.saveGame(function() {
        process.kill(process.pid, 'SIGUSR2');
     });
});

你尝试过使用https://github.com/remy/nodemon/blob/master/doc/events.md 中的 nodemon.on('restart',...)吗? - crackmigg
@migg 不,没有包含 nodemon 包,我会看一下。 - XCS
@migg 不,那个事件没有被调用。 - XCS
所以,我再次从控制台命令启动nodemon。 - XCS
你有找到任何有用的东西吗?@Cristy - Anand Undavia
1
@AnandUndavia 我不太记得了,我想我没有在Windows上成功运行它,我所做的就是定期保存/快照,如果服务器失败/重新启动,我只需加载最新可用的快照。 - XCS
2个回答

3

以下代码在Unix机器上正常工作。现在,由于您的saveGame是异步的,因此您必须在回调函数中调用process.kill。

process.once('SIGUSR2', function() {
    setTimeout(()=>{
        console.log('Shutting Down!');
        process.kill(process.pid, 'SIGUSR2');
    },3000);

});

因此,只要您从game.saveGame()函数内执行回调函数,您的代码看起来就很好。

// Save game before restarting
process.once('SIGUSR2', function () {
     console.log('SIGUR2');
     game.saveGame(function() {
        process.kill(process.pid, 'SIGUSR2');
     });
});

3
这仍然没有回答我的问题,你所说的只是我的代码运行良好,但在我的情况下(在Windows上)并非如此。 - XCS

1
在Windows系统中,可以按照以下方式运行应用程序:

如下所示:

nodemon --signal SIGINT app.js

在app.js中添加代码。
let process = require('process');

process.once('SIGINT', function () {
  console.log('SIGINT received');
  your_func();
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接