node檢測端口可用性的實踐示例
前言
我們編寫自己的框架或者 nodejs 服務(wù)器代碼時,可能會用一些固定使用我們常用的端口。
問題來了,如果是編寫框架,你的框架中固定了框架使用8000端口,用戶使用你的框架時并不知道,此時他本機的8000端口被占用了,那用戶豈不是無法使用你的框架了。
我們需要解決這個問題。
創(chuàng)建項目
$ mkdir project && cd project $ npm init -y
使用express編寫一個服務(wù)器
安裝 express
$ npm i express
編寫一個占用8000端口的服務(wù)。
// project/index.js const express = require('express') const app = new express() app.listen(8000, () => { ? ? console.log(`服務(wù)器在8000端口啟動`) })
啟動
$ node index.js 服務(wù)器在8000端口啟動
此時我們不關(guān)閉該服務(wù),再打開一個命令行,再嘗試啟動。
因為8000端口已經(jīng)運行了一個服務(wù),被占用了,所以報錯了:
$ 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(`服務(wù)器在${port}端口啟動`) ? ? }) })()
我們再重新啟動兩個,成功解決問題。
$ node index.js
服務(wù)器在8000端口啟動
$ node index.js
服務(wù)器在8001端口啟動
尾言
到此這篇關(guān)于node檢測端口可用性的實踐示例的文章就介紹到這了,更多相關(guān)node檢測端口可用性內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
node如何將package.json中的包降為低版本或者升級為高版本
比如現(xiàn)在你用某個包的當(dāng)前版本,但是你安裝的版本高了,那么你應(yīng)該這么做,首先刪除node項目中的node_modules目錄,防止安裝時的包不一致,下面給大家介紹node將package.json中的包降為低版本或者升級為高版本的方法,感興趣的朋友一起看看吧2023-11-11手把手教你VSCode配置JavaScript基于Node.js的調(diào)試環(huán)境
最近在補數(shù)據(jù)結(jié)構(gòu),在用VScode調(diào)試js代碼文件結(jié)果怎么都不行,這篇文章主要給大家介紹了關(guān)于VSCode配置JavaScript基于Node.js的調(diào)試環(huán)境的相關(guān)資料,需要的朋友可以參考下2022-12-12node.js使用Moment.js js 時間計算方法示例小結(jié)
這篇文章主要介紹了node.js使用Moment.js js 時間計算方法,結(jié)合實例形式分析了Moment.js js模塊時間計算的常用操作技巧與相關(guān)注意事項,需要的朋友可以參考下2023-05-05json對象及數(shù)組鍵值的深度大小寫轉(zhuǎn)換問題詳解
這篇文章主要給大家介紹了關(guān)于json對象及數(shù)組鍵值的深度大小寫轉(zhuǎn)換問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03