JavaScript npm portfinder

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)
})

basePort1
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 了呢?
沒錯~ 哈哈 我拖更啦!只好先把之前的筆記那出來擋一擋了~
這… 還算是技術研究的範圍吧~~~

Leave a Reply