简体   繁体   English

重新启动具有相同端口的 Express.js 服务器

[英]Restart an Express.js server with the same port

I have a Node.js app that uses Express.js to listen for connections.我有一个 Node.js 应用程序,它使用 Express.js 来侦听连接。 The code is something like so:代码是这样的:

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

I'd like to implement a way to restart the server without having to restart the whole app.我想实现一种无需重新启动整个应用程序即可重新启动服务器的方法。 However, I can't seem to properly shut down the server and free the port.但是,我似乎无法正确关闭服务器并释放端口。 Here's what I tried:这是我尝试过的:

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

As soon as I run this, I get一旦我运行这个,我就会得到

Error: listen EADDRINUSE :::9001错误:听 EADDRINUSE :::9001

What would be the correct way to do this?这样做的正确方法是什么?

Cheers.干杯。

server.close() is asynchronous and takes a callback. server.close()是异步的并且需要回调。 Try waiting until the server is actually closed before starting a new one:尝试等待服务器实际关闭,然后再启动新服务器:

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

});

As of Express 3, the app.close() method seems to have disappeared, which means Express users have no means of gracefully stopping an application.从 Express 3 开始, app.close()方法似乎已经消失了,这意味着 Express 用户无法正常停止应用程序。 Express is really a listener to http request events which means you can do this: 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.");

For more on this you can refer hardening nodejs for production有关更多信息,您可以参考强化 nodejs 进行生产

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM