node检测端口是否被占用isPortOccupied.js

2023-05-16

    如题所示,node开发中,可能会遇到开启tcp/http服务端口被占用的问题,解决起来也很简单,直接换一个端口就可以了。但是每次启动,发现失败,然后更改监听端口来测试,也很麻烦。

    本文介绍的办法,也是一种通用的办法,端口如果没有被占用,就用该端口,如果端口被占用,一般端口参数是整数,这个时候+1,变更端口,再监听,直到没有被占用,就使用该端口。

    比如,我们监听8080,发现没有监听,那么使用8080。如果被监听,那么使用8081端口,再不行,使用8082,直到端口可用。

    isPortOccupied.js使用Promise的思想,监听指定端口,如果监听成功,那么表示该端口没有被占用,取消监听,返回端口给调用者。如果监听出现错误,则将端口+1,继续递归调用监听,直到监听成功,取消监听,将可用端口号返回给调用者。调用者拿到合适的端口,开启自己的监听服务。就解决了靠自己手动修改端口号去盲试的问题。

const net = require('net')

export function isPortOccupied(port){
    var server = net.createServer().listen(port)
    return new Promise((resolve,reject)=>{
        // 如果监听成功,表示端口没有被其他服务占用,端口可用,取消监听,返回端口给调用者。
        server.on("listening",()=>{
            console.log('the server is running on port '+port)
            server.close()
            resolve(port)
        })
        // 如果监听出错,端口+1,继续监听,直到监听成功。
        server.on("error",(err)=>{
            if(err.code === 'EADDRINUSE'){
                resolve(isPortOccupied(port+1))
                console.log('this port '+ port+' is occupied try another.')
            }else{
                reject(err)
            }
        })
    })
}

    在调用的地方,可以这样来操作:

    isPortOccupied(8000).then(port=>{
        httpServer.listen(port,function(){
            logger.main.info("http server listening at port "+port)
        })
    })

    关于端口占用问题,我们这里不能直接把占用端口的进程杀死,有可能是别的服务,所以发现被占用,是更换一个端口,今天介绍的这种办法采用+1的办法来更换端口号,最终一定可以得到一个可用的端口。 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

node检测端口是否被占用isPortOccupied.js 的相关文章

  • Node 正常启动(node)、热更启动(nodemon)、部署(pm2)、安装包(npm、cnpm、yarn)、发布包(publish) 、node版本管理(NVM) 常用工具----学习笔记(五)

    文章目录 1 Node服务启动指令的配制 2 nodemon Node监听文件变化 自动重启服务的方法 3 pm2 线上部署使用pm2能自动守护进程 4 cnpm yarn 安装包 是使用npm cnpm yarn 5 注册与发布包 6 n
  • axios 的理解和使用 axios.create(对axios请求进行二次封装) 拦截器 取消请求(axios.CancelToken)

    目录 axios是什么 axios特点 axios中文文档 axios常用语法 axios安装 axios简单使用 默认get请求 post put delete axios难点语法 axios create config 对axios请求
  • ERR_PNPM_PEER_DEP_ISSUES Unmet peer dependencies

    ERR PNPM PEER DEP ISSUES 错误 两种解决方式 解决方式 方式一 忽略错误 项目根目录下 npmrc 中添加 strict peer dependencies false 方式二 自动安装对等依赖 项目根目录下 npm
  • vue项目中使用http-proxy-middleware解决前端开发中跨域的问题

    使用方式 1 安装 npm install http proxy middleware save dev 2 使用 一般的使用 新建js文件 在此小编命名为proxy js const proxy require http proxy mi
  • 如何用Nodejs写接口

    有时候前端需调用接口测试功能 但是相关的接口还没有开发好 或者没有相应的数据 这时候怎么办呢 这里教大家使用nodejs express写自己的接口 首先安装express cnpm install express save 然后新建js文
  • node.js和npm的关系

    一 npm是什么 当一个网站依赖的js代码越来越多 程序员发现这是一件很麻烦的事情 去 jQuery 官网下载 jQuery 去 BootStrap 官网下载 BootStrap 去 Underscore 官网下载 Underscore 有
  • Node.js 下载安装环境配置 - 图文版

    Node js 是一个开源 跨平台的 JavaScript 运行时环境 一 介绍 1 官方文档 1 中文文档 Node js 中文网 2 英文文档 Node js 二 下载 1 中文 2 英文 编辑三 安装 1 新建一个文件夹作为安装路径
  • node写可选参数接口

    个人网站 紫陌 笔记分享网 想寻找共同学习交流 共同成长的伙伴 请点击 前端学习交流群 今天写项目接口看到接口文档要求带四个参数两个参数必选两个可选 当时在想可选参数要怎么做 毕竟自己也没有写过 然后想了一天终于想出一个感觉不是最佳的方案
  • Windows NodeJS 二进制文件安装

    第一步下载node下载 Node js 中文网 本人系统Win10 X64 如图 将下载的zip包解压到你自定义的目录 尽量不要有空格或中文 你懂的 作者选择了d盘下自定义目录D datastorage下 解压后的文件目录如图所示 在此目录
  • Async详解之一:流程控制

    转载 http freewind me blog 20120515 917 html 为了适应异步编程 减少回调的嵌套 我尝试了很多库 最终觉得还是async最靠谱 地址 https github com caolan async Asyn
  • npm start 作用

    在配置phonecat项目时需要运行npm start在本地配置一个服务器环境 npm start首先会安装一系列的必要程序 这些程序依赖package json中的内容 package json中的内容详解如下 依赖包介绍 在克隆项目之后
  • Node.js搭建WEB服务器

    Node js搭建WEB服务器 1 安装Node和nodemon插件 2 引入http模块 3 创建服务监听端口 4 解析接口地址 5 解析get参数 6 解析post参数 1 安装Node和nodemon插件 全局安装nodemon插件
  • 什么是node,node怎么用?

    Node js 是一个基于Chrome V8 引擎的JavaScript运行环境 Node js使用了一个事件驱动 非阻塞式I O的模型 使其轻量又高效 事件驱动 任务执行 发布者 订阅者 事件驱动 on emit 非阻塞 执行某一个任务的
  • node连接mysql实现带分页列表多条件模糊查询效果-新手教程

    前言 使用node连接mysql 这里是模糊查询方法完整流程 第一 安装我们的express脚手架 入口 第二 在根目录下创建model文件夹 里面放两个文件 1 mysql config js 这里放的是我们的数据库配置 配置链接数据库参
  • jsoup的Elements类

    随时随地阅读更多技术实战干货 获取项目源码 学习资料 请关注源代码社区公众号 ydmsq666 一 简介 该类是位于select包下 直接继承自Object 所有实现的接口有Cloneable Iterable
  • 【node】12、Koa实现简单爬虫案例

    效果图如下 首先我们新建文件夹 进入终端 初始化node项目 npm init y 安装koa搭建服务模块 npm install koa 安装superagent发送请求模块 npm install superagent 安装cheeri
  • express脚手架安装和使用,node添加跨域处理

    前言 node的脚手架 express generator 的安装和使用 安装 步骤一 全局安装脚手架 npm i express generator g cnpm i express generator g 可以运行命令 express
  • 文字转png图片

    body中的数据格式 Convert text to PNG image param text param options param options font 30px sans serif css style font param op
  • Nodejs版本管理工具mvn部署

    部署mvn curl o https raw githubusercontent com creationix nvm v0 34 0 install sh bash 添加环境变量 vim zshrc export NVM DIR HOME
  • Node之使用dns模块解析域名

    引 在网络编程中 开发者更倾向于使用域名 而不是IP地址来指定网络连接的目标地址 在Node js中 提供dns模块 以实现域名查找及域名解析的处理 在dns模块中 提供了三个主方法及一系列便捷方法 其中三个主方法分别为用于将一个域名解析为

随机推荐

  • java控制台输出颜色设置

    在java中 xff0c 控制台输出 xff0c System out println 显示默认黑色 xff0c 如果是System err println 显示红色 要想让控制台输出改变颜色 xff0c 需要做一些设置 就像在linux终
  • java删除非空文件夹

    java中删除文件和空文件夹很简单 xff0c 直接调用File api xff0c file delete 就可以删除文件或者空文件夹本身 但是如果是非空文件夹 xff0c 这个方法就会失败 xff0c 就像在linux下我们使用命令rm
  • springboot项目中PropertySource读取yaml配置文件

    springboot项目中 xff0c 当我们使用 64 Value注解读取配置属性 xff0c 默认的配置文件是properties类型文件 xff0c 如果一些配置来自yaml格式配置文件 xff0c 那么就需要做一个配置 Proper
  • Java内存溢出问题排查分析

    目录 前言 一 MAT xff08 Memory Analyzer Tool xff09 二 软件初识 三 捕获dump文件 1 主动方式 2 被动方式 四 分析dump文件 总结 前言 项目运行过程中 xff0c 我们可能会遇到Java内
  • Excel行变列,列变行技巧以及单元格换行

    在excel操作中 xff0c 有可能有这样的需求 xff0c 就是一列数据 xff0c 我们最终需要把他们放在一行上展示 xff0c excel提供了复制粘贴功能 xff0c 在粘贴的时候 xff0c 右键选择 选择性粘贴 xff0c 再
  • snakeyaml生成yaml文件空值显示问题

    snakeyaml开源库 xff0c 可以很方便的加载和生成yaml文件 xff0c 普通的加载 xff0c 其实springboot项目都可以实现 xff0c 在生成yaml文件的时候 xff0c 有几个问题需要注意 xff0c 第一个是
  • java反射调用System.out.println实现控制台打印

    在java编程中 xff0c 我们最常用的控制台打印就是System out println 我们如果想用反射的方式来实现打印 xff0c 该如何操作呢 xff1f 我们可能会想着直接这样使用 Class forName 34 java l
  • vscode官方下载太慢解决办法

    不说话 xff0c 直接上动态图 xff1a 详细步骤 xff1a 1 打开官网 xff1a Visual Studio Code 点击下载 2 在下载器这里复制下载链接 xff0c 粘贴到浏览器地址栏 3 改变官网地址主地址为 vscod
  • node通过node-java库调用java

    node有一个库 node java xff0c 可以通过js的方式调用java语言 xff0c 听起来好像很好玩 xff0c 但是这个玩意要求很复杂 1 本机安装msbuild环境 这个东西简单的安装方式就是npm install g w
  • node-gyp编译c++编写的node扩展

    node有一个模块addon xff0c 翻译过来 xff0c 是插件 xff0c 但是有的地方也叫扩展 xff0c 这部分是用c 43 43 来编写的 xff0c 最后可以通过node gyp来针对各个平台编译适合自己平台的扩展 xff0
  • log4j日志漏洞问题

    去年 xff0c log4j被爆出了一个漏洞 xff0c 说可以通过利用日志格式化中的远程注入控制主机 当时 xff0c 这个漏洞被形容为史诗级漏洞 xff0c 因为这个远程操作可以执行一些操作 xff0c 如果这个操作有恶意 xff0c
  • postgresql数据备份与恢复

    postgresql数据备份与恢复在实际工作中可能会用到 xff0c 这里记录一下自己整理的备份与恢复的过程 xff0c 备份一般使用pg dump来做 xff0c 但是它备份的结果有两种格式 xff0c 默认不加 Fc参数 xff0c 产
  • bat批处理脚本大全

    目录 1 echo 2 注释 3 常见cmd命令 4 参数与变量 5 for循环 6 函数 7 数组 在windows上编程或者制作一些小工具 xff0c 少不了使用批处理脚本 xff0c 而且在各种开发环境搭建中我们经常会看到批处理脚本
  • node日志log4js库使用示例

    在node开发或者electron项目开发中 xff0c 我们可能需要记录日志的功能 xff0c 便于我们出错排查问题 今天介绍node中的日志库log4js log日志记录 xff0c 一般需要配置日志记录的级别 xff0c 日志输出类型
  • Maven项目引用本地jar涉及scope配置

    在项目开发过程中 xff0c 难免遇到需要引用私有jar的情况 xff0c 这时候最好是将该jar推送到私服仓库 xff0c 但是由于种种 现实问题 xff0c 比如权限不够 时间不够等等 于是就可以尝试将jar放入项目中进行集成 xff0
  • postgresql使用pg_basebackup备份与恢复

    postgresql可以使用pg dump pg restore等命令来进行备份与恢复 xff0c 那种情况不用停止pgsql服务 xff0c 只需要执行备份恢复命令即可 今天介绍的这种备份方式 xff0c 类似于文件系统的备份与恢复 xf
  • java中list与数组相互转换

    java中 xff0c list转数组 xff0c 很方便 xff0c list本身自带一个方法toArray xff0c 但是这个方法默认返回的数组类型是Object xff0c 我们可以给toArray 方法传递一个类型参数 xff0c
  • cython混淆加密

    python代码是一种解释型的语言 xff0c 有了代码和环境就可以执行 xff0c 它无需编译 如果需要对代码进行混淆 xff0c 可以借助cython这个库 它的安装很简单 xff0c 直接运行pip install cython就可以
  • python文件夹拷贝思路

    最近在做项目中 xff0c 要使用python xff0c 对文件拷贝有了一些了解 xff0c 这里将自己理解的文件拷贝整理出来 如下所示 xff0c 文件拷贝思路 xff1a 文件拷贝 xff0c 从io上来说就是读文件 xff0c 写文
  • node检测端口是否被占用isPortOccupied.js

    如题所示 xff0c node开发中 xff0c 可能会遇到开启tcp http服务端口被占用的问题 xff0c 解决起来也很简单 xff0c 直接换一个端口就可以了 但是每次启动 xff0c 发现失败 xff0c 然后更改监听端口来测试