以编程方式停止并重新启动快速服务器(以更改端口)

Mat*_*att 25 ports node.js express

我希望能够基本上更改我的快速应用程序正在运行的端口.

我试过了:

server.on('close', function() {
  server.listen(3000);
});

server.listen(8080);
server.close();
Run Code Online (Sandbox Code Playgroud)

这会返回一个神秘的node.js错误.我正在运行节点v0.4.11,我现在正在升级以查看是否修复了它.

编辑这是错误:

Assertion failed: (!io->watcher_.active), function Set, file ../src/node_io_watcher.cc, line 160.
Run Code Online (Sandbox Code Playgroud)

谢谢,马特

log*_*yth 36

问题.listen是异步.通过在呼叫.close后立即呼叫.listen,您在打开它之前将其关闭.

试试这个.

server.listen(8080, function() {
  server.close();
});
Run Code Online (Sandbox Code Playgroud)

  • #close也是异步的.它有一个回调函数,只有在服务器处理完所有剩余连接时才会触发 (4认同)
  • app.close() 不是(更长?)express api https://expressjs.com/en/api.html v4 的一部分 (3认同)
  • @HarryMoreno 是的,它是 Node 的 API https://nodejs.org/api/net.html#net_server_close_callback 在这个问题中的一部分,`server` 是一个 Node 服务器,它附加了一个快速应用程序。它不是快递“应用程序”本身。 (2认同)
  • 在这种情况下,“服务器”可能是通过监听 Express 应用程序获得的,如德里克·希尔的答案所示。 (2认同)

Der*_*ill 17

感谢@aymericbeaumet,以下代码段适用于 Express 4:

var app = express();

var server = app.listen(8080, function() {
  console.log('Listening :)');
  server.close(function() { console.log('Doh :('); });
});
Run Code Online (Sandbox Code Playgroud)