Перезапустите сервер Express.js с тем же портом

1

У меня есть приложение 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

Каким будет правильный способ сделать это?

Приветствия.

Теги:
express

2 ответа

1

server.close() является асинхронным и выполняет обратный вызов. Попробуйте подождать, пока сервер не будет закрыт, прежде чем запускать новый:

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

});
  • 0
    Спасибо! Однако это вызывает другой вопрос: что если я хочу разделить это поведение на две функции? Одна функция для закрытия сервера, а другая для его повторного запуска? Ака closeServer () и startServer ()
  • 0
    Вы объясняете server.close() для узла-сервера. для экспресс-приложения нет метода с именем close.
0

Начиная с Express 3, метод app.close() кажется, исчез, что означает, что у Экспресс-пользователей нет средств для изящной остановки приложения. 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.");

Более подробно об этом вы можете обратиться за упрочняющими узлами для производства

  • 0
    Есть ли какие-либо предостережения от использования этого в производстве?
  • 0
    Но app.listen() прежнему возвращает экземпляр узла http.Server .
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню