nodejs檢查端口是否被佔用,先看個運行效果:
PS D:\software\wamp\www\subtitleGo> node t.js
8022 ====被佔用====:
8023 ====被佔用====:
8024 ====被佔用====:
8025 ====端口:8025可用====
沒錯,它會一直遞歸檢測端口是否可用,直到可用。
代碼:
# 遞歸檢測端口是否可用
const net = require('net');
async function portInUse(port){
return new Promise((resolve, reject)=>{
let server = net.createServer().listen(port);
server.on('listening',function(){
server.close();
resolve(port);
});
server.on('error',function(err){
if(err.code == 'EADDRINUSE'){
port++;
reject(err);
}
});
});
}
const tryUsePort = function(port,_portAvailableCallback){
portInUse(port).then((port)=>{
_portAvailableCallback(port);
}).catch((err)=>{
console.log(port+" ====被佔用====:\n");
port++;
tryUsePort(port,_portAvailableCallback);
})
}
// 測試
tryUsePort(port=8022,function(port){
// do something ...
console.log(port+" ====端口:"+port+"可用====\n");
net.createServer().listen(port);
});
參考:
Node.js內部是如何捕獲異步錯誤的 https://zhuanlan.zhihu.com/p/62210238