node-portfinder 是一個跑在 node 環境上 能幫我們在電腦環境中
找到空的、沒人使用的 port
找到後就可以看你要怎麽用囉!
首先!建立好自己的工作目錄 安裝 portfinder
## 建立一個空的目錄 進入目錄 mkdir port-finder-test cd port-finder-test ## 初始化、安裝 portfinder npm init npm install portfinder
這樣安裝就完成了!
再來就是試用了 首先照著官網的跑一次吧!
const portfinder = require('portfinder'); portfinder.getPort(function (err, port) { // 會幫我們找到環境中保證可以使用的 port 號 // 一般來說會顯示 8000 console.log(port) // 沒有錯誤的話 err 會是 null console.log(err) });
他也有 Promise 的寫法
const portfinder = require('portfinder'); portfinder.getPortPromise() .then((port) => { // 可用的 port 會在這裡 console.log(port) }) .catch((err) => { // 如果真的找不到可用 port 的話會到這裡 // 把 err 叫出來可以看到為什麼找不到可以用的 port console.log(err) });
portfinder 是這樣的:
他的預設是 8000 所以我們直接呼叫他的 getPort() 放法的話
他會從 8000 開始往後找
一路找到 65535 直到有一個空閒的 port 給我們用
我們當然也可以把他的預設 8000 往後或往前調整
portfinder.basePort = 3000 // 起始 從 3000 開始 portfinder.highestPort = 3333 // 最高找到 3333 就不找了 沒有的話跳錯誤
還有另外一種定義起始、結束方法
portfinder.getPort({ port: 3000, // 起始 port stopPort: 3333 // 最高 port }, callback);
最後 一些是我自己的小測試,客官們就加減看看吧!
把 basePort 調成 1
const portfinder = require('portfinder') portfinder.basePort = 1 // 如果把 basePort 定義為 1 的話 portfinder.getPort((err, port) => { // port 還是會從 1024 開始 console.log(port) // 1024 // err 是 null console.log(err) })
basePort 為 1
highestPort 卻沒有超過 1024
const portfinder = require('portfinder') portfinder.basePort = 1 // 如果把 basePort 定義為 1 的話 portfinder.highestPort = 1000 // 卻又把最高 port 設定在 1024 以下的話 portfinder.getPort((err, port) => { // port 會出 undefined console.log(port) // err 會出: Error: No open ports available console.log(err) })
如果把 basePort 設定得比 highestPort 還要大的話
const portfinder = require('portfinder') // 如果把 basePort 設定得比 highestPort 還要大的話 portfinder.basePort = 3000 portfinder.highestPort = 2500 portfinder.getPort((err, port) => { // 這樣得話他連這裡的 scope 都不會進來了 // 直接在呼叫 getPort 的同時就會報錯了 console.log(port) }) // 錯誤訊息: // node_modules/portfinder/lib/portfinder.js:124 // throw Error('Provided options.stopPort(' + options.stopPort + 'is less than options.startPort (' + options.startPort + ')'); // Error: Provided options.stopPort(2500is less than options.startPort (3000) // at Object.exports.getPort // 就是叫我們不要這樣設定啦~
以上 謝謝!
怎麽 Java Servlet 寫著寫著,就換成 JavaScript 了呢?
沒錯~ 哈哈 我拖更啦!只好先把之前的筆記那出來擋一擋了~
這… 還算是技術研究的範圍吧~~~