Как проверить существует ли открытый порт на Node.js?

У меня сделан сервер на Node.js и определён прокси сервер.

http = require('http');
var httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});


this.httpServer = https.createServer(credentials, function(request, response) {
....

  proxy.web(request, response, { target: 'http://127.0.0.1:5001' });
}

Если у меня проксируемый порт существует всё хорошо работает. Но если у меня этот порт отсутствует у меня появляется ошибка. Я её могу в callback -е но после этого, когда появляется порт проксирование не происходит.

Наверное я могу новый инстанс прокси сервера сделать и он заработает, но как мне проверить существует ли открытый порт, что бы если он не существует не создавать прокси и не ставить проверку ошибок в этом месте ?


Ответы (1 шт):

Автор решения: Total Pusher

В NodeJS есть модуль работы с сетью. В коде ниже осуществляется соединение с сокетом, по результатам которого выводится сообщение yes/no.

const net = require("net");

class PortChecker {

    async testPort(port, host) {

        return new Promise((resolve, reject) => {
            const socket = new net.Socket();

            socket.on("connect", () => {
                socket.destroy();
                resolve("yes");
            });

            socket.on("timeout", () => {
                socket.destroy();
                resolve("no");
            });

            socket.on("error", () => {
                socket.destroy();
                resolve("no");
            });

            socket.connect(port, host);

        });
    }

}

let pc = new PortChecker;

pc.testPort(22, "127.0.0.1").then((result) => {
    console.log(`Is port open? ${result}`);
}).catch(err => {
    console.log("Fatal error:", err);
    process.exit(1);
});
→ Ссылка