node檢測(cè)端口可用性的實(shí)踐示例
前言
我們編寫自己的框架或者 nodejs 服務(wù)器代碼時(shí),可能會(huì)用一些固定使用我們常用的端口。
問(wèn)題來(lái)了,如果是編寫框架,你的框架中固定了框架使用8000端口,用戶使用你的框架時(shí)并不知道,此時(shí)他本機(jī)的8000端口被占用了,那用戶豈不是無(wú)法使用你的框架了。
我們需要解決這個(gè)問(wèn)題。
創(chuàng)建項(xiàng)目
$ mkdir project && cd project $ npm init -y
使用express編寫一個(gè)服務(wù)器
安裝 express
$ npm i express
編寫一個(gè)占用8000端口的服務(wù)。
// project/index.js const express = require('express') const app = new express() app.listen(8000, () => { ? ? console.log(`服務(wù)器在8000端口啟動(dòng)`) })
啟動(dòng)
$ node index.js 服務(wù)器在8000端口啟動(dòng)
此時(shí)我們不關(guān)閉該服務(wù),再打開(kāi)一個(gè)命令行,再嘗試啟動(dòng)。
因?yàn)?000端口已經(jīng)運(yùn)行了一個(gè)服務(wù),被占用了,所以報(bào)錯(cuò)了:
$ node index.js
Error: listen EADDRINUSE: address already in use :::8000
解決
安裝 portfinder
$ npm i portfinder
使用 portfinder 來(lái)檢測(cè)端口是否可用,如果被占用會(huì)重新尋找一個(gè)可用的端口給你。
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}端口啟動(dòng)`) ? ? }) })()
我們?cè)僦匦聠?dòng)兩個(gè),成功解決問(wèn)題。
$ node index.js
服務(wù)器在8000端口啟動(dòng)
$ node index.js
服務(wù)器在8001端口啟動(dòng)
尾言
到此這篇關(guān)于node檢測(cè)端口可用性的實(shí)踐示例的文章就介紹到這了,更多相關(guān)node檢測(cè)端口可用性內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Nest.js使用multer實(shí)現(xiàn)文件上傳功能
這篇文章主要為大家詳細(xì)介紹了Nest.js鵝湖使用multer實(shí)現(xiàn)文件上傳功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03Linux通過(guò)yum命令徹底刪除node.js并重新安裝
這篇文章主要介紹了Linux通過(guò)yum命令徹底刪除node.js并重新安裝,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2021-11-11node如何將package.json中的包降為低版本或者升級(jí)為高版本
比如現(xiàn)在你用某個(gè)包的當(dāng)前版本,但是你安裝的版本高了,那么你應(yīng)該這么做,首先刪除node項(xiàng)目中的node_modules目錄,防止安裝時(shí)的包不一致,下面給大家介紹node將package.json中的包降為低版本或者升級(jí)為高版本的方法,感興趣的朋友一起看看吧2023-11-11Node.js16.15.1的一個(gè)報(bào)錯(cuò)以及解決方案分享
這篇文章主要給大家介紹了關(guān)于Node.js16.15.1的一個(gè)報(bào)錯(cuò)以及解決方案的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2022-12-12手把手教你VSCode配置JavaScript基于Node.js的調(diào)試環(huán)境
最近在補(bǔ)數(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 時(shí)間計(jì)算方法示例小結(jié)
這篇文章主要介紹了node.js使用Moment.js js 時(shí)間計(jì)算方法,結(jié)合實(shí)例形式分析了Moment.js js模塊時(shí)間計(jì)算的常用操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2023-05-05node.js中的fs.futimes方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.futimes方法使用說(shuō)明,本文介紹了fs.futimes方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12json對(duì)象及數(shù)組鍵值的深度大小寫轉(zhuǎn)換問(wèn)題詳解
這篇文章主要給大家介紹了關(guān)于json對(duì)象及數(shù)組鍵值的深度大小寫轉(zhuǎn)換問(wèn)題的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-03-03使用nvm進(jìn)行多個(gè)nodejs版本的統(tǒng)一管理
隨著前端項(xiàng)目的越來(lái)越多,不同項(xiàng)目使用的nodejs版本可能不一樣,導(dǎo)致在切換不同項(xiàng)目時(shí)需要更換不同的nodejs版本,非常麻煩,本次推薦使用nvm進(jìn)行多個(gè)nodejs版本的統(tǒng)一管理,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下2023-12-12