nodejs检查端口是否被占用,先看个运行效果:
E:\wamp64\www\tmpPro\tryuseport>node t.js
端口:8022被占用
端口:8023被占用
端口:8024可用
没错,它会一直递归检测端口是否可用,直到可用。
代码:
const net = require('net');
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'){
resolve(err);
}
});
});
}
const tryUsePort = async function(port, portAvailableCallback){
let res = await portInUse(port);
if(res instanceof Error){
console.log(`端口:${port}被占用\n`);
port++;
tryUsePort(port, portAvailableCallback);
}else{
portAvailableCallback(port);
}
}
// 测试
let port=8022;
tryUsePort(port ,function(port){
// do something ...
console.log(`端口:${port}可用\n`);
// net.createServer().listen(port);
});
参考:
Node.js内部是如何捕获异步错误的 https://zhuanlan.zhihu.com/p/62210238