在日常开发中,我们常常要自己启动一个se【关注微信公众号:wwwtangshuangnet】【版权所有,侵权必究】rver来进行本地调试,但是如果写死端口【未经授权禁止转载】【原创内容,转载请注明出处】,就会导致端口冲突,怎么解决呢?
原创内容,盗版必究。转载请注明出处:www.tangshua【版权所有】唐霜 www.tangshuang.net本文版权归作者所有,未经授权不得转载。ng.net【本文受版权保护】转载请注明出处:www.tangshua本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。ng.net/* eslint-disable @typescript-eslint/no-require-imports */
const net = require('net');
function checkPortUsable(port) {
return new Promise((resolve, reject) => {
const server = net.createConnection({ port });
server.on('connect', () => {
server.end();
reject(`Port ${port} is not available!`);
});
server.on('error', () => {
resolve(port);
});
});
}
function randomNumByRange(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
function findUsablePort(port, minPort = 10000, maxPort = 65536) {
const retry = () => {
const port = randomNumByRange(minPort, maxPort);
return findUsablePort(port, minPort, maxPort);
};
return checkPortUsable(port)
.then(() => port)
.catch(retry);
}
module.exports = {
findUsablePort,
checkPortUsable,
};
具体使用的时候,调用findUsable原创内容,盗版必究。【版权所有】唐霜 www.tangshuang.netPort即可:
【版权所有,侵权必究】【作者:唐霜】【转载请注明来源】本文版权归作者所有,未经授权不得转载。findUsablePort(4000).then((port) => app.listen(port))
如果4000可用,就会直接用4000,否原创内容,盗版必究。【本文受版权保护】则就会使用一个随机端口。
未经授权,禁止复制转载。本文作者:唐霜,转载请注明出处。未经授权,禁止复制转载。

net.createConnection({ port })这种模式是建立客户端尝试连接该端口, 但是如果该端口已经被使用,但防火墙做了限制,应该也会触发连接错误; 会造成误判;
用创建服务监听的方式应该更完善一些.