Как проверить существует ли открытый порт на 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);
});