nodejs检查端口是否被占用(完美方案)


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);
});

参考:

  1. Node.js内部是如何捕获异步错误的 https://zhuanlan.zhihu.com/p/62210238     

猜你喜欢

转载自blog.csdn.net/qq_36110571/article/details/105318699