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

4

我有一个使用Express.js监听连接的Node.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.");

一旦我运行这个程序,就会出现以下错误:

Error: listen EADDRINUSE :::9001

请问正确的做法是什么呢?

谢谢。

2个回答

2

谢谢!不过,这带来了另一个问题:如果我想将此行为分成两个函数怎么办?一个函数用于关闭服务器,另一个函数用于重新启动服务器? 即closeServer()和startServer()。 - Opalium
你正在解释如何在Node服务器中使用server.close()方法。但是对于Express应用程序,没有名为close的方法。 - kgangadhar

0
从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.");

如果您想了解更多信息,可以参考加固Node.js以用于生产环境


在生产中使用这个有什么需要注意的地方吗? - Ayush Gupta
但是app.listen()仍然返回一个Node http.Server实例。 - zero298
是的。这就是我们可以使用 http.Server.close() 方法停止服务器的方式。 - kgangadhar
@AyushGupta,关于生产相关的内容,您可以参考这里 - kgangadhar

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