【问题标题】:Is there a way to restart node server in runtime?有没有办法在运行时重新启动节点服务器?
【发布时间】:2020-07-07 07:13:05
【问题描述】:

我正在尝试在我的快速服务器中定义一个端点,只要调用此端点,服务器就会在运行时自动重新启动。 例如,使用 express 我的服务器看起来像这样......

var express = require('express')
var app = express();

app.post('/restart', (req,res)=>{
//restart or create a new instance of the server

// then reply
res.json({
    'message': 'server restarted successfully'
   })
})

// =======================
// start the server ======
// =======================
var port = process.env.PORT || 8000; 

app.listen(port);
console.log('server running at  http://localhost:' + port);

注意:虽然我使用的是 expressJS,但我对其他解决方案(例如 HAPI)持开放态度。

提前致谢

【问题讨论】:

  • 查看cluster。每当一个人关闭时就开始一个新的工人。然后在需要时直接退出。

标签: javascript node.js express hapijs


【解决方案1】:

我知道如何重新启动节点实例的唯一方法是在 CLI 级别通过 npm forever 或 pm2,但这是针对部署级别 xP。

【讨论】:

    【解决方案2】:

    您需要将 npm 模块 forever 全局安装在您的系统上,并将 Shelljs 作为依赖项。最初以forever start {Path to server.js} 启动您的服务器。然后就可以了

    var express = require('express')
    var shell = require('shelljs')
    var app = express();
    
    app.post('/restart', (req,res)=>{
    //restart or create a new instance of the server
    shell.exec('forever restart {Path to server.js}');
    
    // then reply
    res.json({
        'message': 'server restarted successfully'
       })
    })
    
    // =======================
    // start the server ======
    // =======================
    var port = process.env.PORT || 8000; 
    
    app.listen(port);
    console.log('server running at  http://localhost:' + port);
    

    还请注意,您不会收到响应,因为服务器会重新启动。您只会收到拒绝连接。

    【讨论】:

      【解决方案3】:

      您可以使用PM2 使用简单的命令来启动、停止您的服务器。

      在生产模式下启动应用程序非常简单:

      pm2 start app.js
      

      停止所有应用

      pm2 stop all
      

      重启所有应用

      pm2 restart all
      

      我希望这对你有用。

      谢谢!

      【讨论】:

        【解决方案4】:

        由于 express 使用来自 Node 的 HTTP,您可以使用 Node HTTP 函数自己初始化 Express 服务器,注意 here

        一旦您启动了服务器,您可以关闭它并按照您的意愿重新启动它,如 here 所述。

        您必须小心已经打开的连接,因为调用 HTTP 实例进行关闭将使已经打开的连接仍然打开。更多关于关闭它们的信息;可以找到here

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-11-17
          • 1970-01-01
          • 2020-06-05
          相关资源
          最近更新 更多