Nodejs檢測端口是否被佔用

2016-04-11前端

Nodejs檢測端口是否被佔用

開啓本地服務時,有這麼一種狀況:當前端口已經被另外一個項目使用了,致使服務開啓失敗。
那麼接下來,咱們經過簡簡單單的十行代碼來檢測端口是否已經被佔用。node

思路

想要知道端口是否被佔用,咱們能夠開啓一個新的服務並監聽該端口,若開啓成功則說明端口未被佔用,反之該端口已經被其餘程序使用了。
基本思路有了,下面咱們開始編寫代碼。git

基礎代碼

portIsOccupied.jsgithub

var net = require('net')

// 檢測端口是否被佔用
function portIsOccupied (port) {
  // 建立服務並監聽該端口
  var server = net.createServer().listen(port)

  server.on('listening', function () { // 執行這塊代碼說明端口未被佔用
    server.close() // 關閉服務
    console.log('The port【' + port + '】 is available.') // 控制檯輸出信息
  })

  server.on('error', function (err) {
    if (err.code === 'EADDRINUSE') { // 端口已經被使用
      console.log('The port【' + port + '】 is occupied, please change other port.')
    }
  })
}

// 執行
portIsOccupied(1987)

測試

執行 node portIsOccupied.js,正常狀況下會輸出 The port【1987】 is available.數組

使用ssr將當前目錄設置成靜態服務器,關於ssr的使用能夠在這裏找到 https://github.com/jaywcjlove/ssr
ssr默認會開啓 1987 端口。bash

這時,再次執行 node portIsOccupied.js,輸出 The port【1987】 is occupied, please change other port.服務器

讓程序更加完美

到這裏爲止,咱們已經可以檢測端口是否被佔用。
可是,假如我要檢測另一個端口,每次都得更改文件的端口號,至關的麻煩。
那麼有沒有更加完美的實現方法呢?固然有!測試

Nodejs中,有這麼一個好玩的東西 process.argv,它是一個數組,前兩個值分別是node程序所在位置和當前運行的文件所在位置。
神奇的是,咱們運行程序時,所傳的參數能夠經過 process.argv 獲得。
好比這樣子 node portIsOccupied.js -p 1987,那麼會將 -p 和 1987 添加到 process.argv 數組的末尾。
知道了原理,下面咱們來編寫更加完美的程序吧。ui

控制檯給程序傳參

修改 portIsOccupied(1987) 爲:ssr

var port = 80 // 默認檢測80端口
if (process.argv[2] === '-p') {
  port = parseInt(process.argv[3])
}

portIsOccupied(port)

執行

node portIsOccupied.js -p [port]

其中 [port] 是你想要檢測的端口。

個人博客

歡迎在個人博客瀏覽本篇文章,地址 http://ansenhuang.github.io/

相關文章
相關標籤/搜索