Javascript 使用相同的端口重新启动Express.js服务器

Javascript 使用相同的端口重新启动Express.js服务器,javascript,node.js,express,Javascript,Node.js,Express,我有一个Node.js应用程序,它使用Express.js侦听连接。代码是这样的: const express = require("express"); var server = express(); server.get("/test", (req, res) => testResponse(req, res)); server.listen(9001); console.info("Server is listening to port 9001."); 我想实现一种方法来重新启动

我有一个Node.js应用程序,它使用Express.js侦听连接。代码是这样的:

const express = require("express");
var server = express();
server.get("/test", (req, res) => testResponse(req, res));
server.listen(9001);
console.info("Server is listening to port 9001.");
我想实现一种方法来重新启动服务器,而不必重新启动整个应用程序。但是,我似乎无法正确关闭服务器并释放端口。 以下是我尝试过的:

server.close();
console.info("Server closed. Restarting.");

var server = express();
server.get("/test", (req, res) => testResponse(req, res));
server.listen(9001);
console.info("Server is listening to port 9001.");
一旦我运行这个,我就会

错误:侦听EADDRINUSE::9001

正确的方法是什么

干杯。

是异步的,接受回调。在启动新服务器之前,请尝试等待服务器实际关闭:

server.close(()=>{

    console.info("Server closed. Restarting.");

    var server = express();
    server.get("/test", (req, res) => testResponse(req, res));
    server.listen(9001);
    console.info("Server is listening to port 9001.");

});

从Express 3开始,
app.close()
方法似乎已经消失,这意味着Express用户无法正常停止应用程序。Express实际上是http请求事件的侦听器,这意味着您可以执行以下操作:

const express = require("express");
var server = express();
server.get("/test", (req, res) => testResponse(req, res));
var app = server.listen(9001, function () {
    console.log('Listening :)');
    app.close(function () {
        console.info("Server closed. Restarting.");
        var server = express();
        server.get("/test", (req, res) => testResponse(req, res));
        server.listen(9001);
        console.info("Server is listening to port 9001.");
    });
});;
console.info("Server is listening to port 9001.");

有关这方面的更多信息,请参阅

谢谢!然而,这带来了另一个问题:如果我想将此行为分为两个函数,该怎么办?一个用于关闭服务器的函数,另一个用于再次启动服务器?A.k.A.closeServer()和startServer(),您正在解释节点服务器的
server.close()
。对于express app,没有名为close的方法。在生产环境中使用此方法有任何注意事项吗?但仍然返回一个节点
http.Server
instance.Yes。这就是使用http.server.close()停止服务器的方法。method@AyushGupta,有关与生产有关的资料,请参阅