Простой, но довольно грязный способ - попытаться использовать порт и посмотреть, выдаст ли он ошибку EADDRINUSE
.
function isPortTaken(port, fn) {
var net = require('net')
var tester = net.createServer()
.once('error', function (err) {
if (err.code != 'EADDRINUSE')
fn(true)
})
.once('listening', function () {
tester.once('close', function () {
fn(false)
})
.close()
})
.listen(port)
}
Обратный вызов выдаст логическое значение.
Я собирался написать этот сценарий сам, но потом нашел его где-то и внес в него небольшие изменения. Вы можете найти оригинальный скрипт здесь:
https://gist.github.com/timoxley/1689041