node检测端口可用性的实践示例

前言

我们编写自己的框架或者 nodejs 服务器代码时,可能会用一些固定使用我们常用的端口。

问题来了,如果是编写框架,你的框架中固定了框架使用8000端口,用户使用你的框架时并不知道,此时他本机的8000端口被占用了,那用户岂不是无法使用你的框架了。

我们需要解决这个问题。

创建项目

$ mkdir project && cd project
$ npm init -y

使用express编写一个服务器

安装 express

$ npm i express

编写一个占用8000端口的服务。

// project/index.js

const express = require('express')
const app = new express()

app.listen(8000, () => {
    console.log(`服务器在8000端口启动`)
})

启动

$ node index.js
服务器在8000端口启动

此时我们不关闭该服务,再打开一个命令行,再尝试启动。

因为8000端口已经运行了一个服务,被占用了,所以报错了:

$ node index.js
Error: listen EADDRINUSE: address already in use :::8000

解决

安装 portfinder

$ npm i portfinder

使用 portfinder 来检测端口是否可用,如果被占用会重新寻找一个可用的端口给你。

const express = require('express')
const portfinder = require('portfinder')
const app = new express()

const default_port = 8000;

(async () => {
    const port = await portfinder.getPortPromise({
        port: default_port
    })

    app.listen(port, () => {
        console.log(`服务器在${port}端口启动`)
    })
})()

我们再重新启动两个,成功解决问题。

$ node index.js
服务器在8000端口启动

$ node index.js
服务器在8001端口启动

尾言

作者:在下月亮有何贵干原文地址:https://blog.csdn.net/weixin_43877799/article/details/124423540

%s 个评论

要回复文章请先登录注册