天天看點

Nodejs 實用工具集筆記

<a href="#%E5%89%8D%E8%A8%80">前言</a>

<a href="#%E5%B7%A5%E5%85%B7%E5%88%97%E8%A1%A8">工具清單</a>

<a href="#supervisor">supervisor</a>

<a href="#%E5%AE%89%E8%A3%85">安裝</a>

<a href="#%E4%BD%BF%E7%94%A8">使用</a>

<a href="#node-inspector">node-inspector</a>

<a href="#%E5%AE%89%E8%A3%85-1">安裝</a>

<a href="#%E4%BD%BF%E7%94%A8-1">使用</a>

<a href="#superagent">SuperAgent</a>

<a href="#%E5%AE%89%E8%A3%85-2">安裝</a>

<a href="#%E4%BD%BF%E7%94%A8-2">使用</a>

<a href="#%E6%95%99%E7%A8%8B">教程</a>

<a href="#cheerio">cheerio</a>

<a href="#%E5%AE%89%E8%A3%85-3">安裝</a>

<a href="#%E4%BD%BF%E7%94%A8-3">使用</a>

<a href="#%E6%95%99%E7%A8%8B-1">教程</a>

<a href="#%E6%80%BB%E7%BB%93">總結</a>

學了Nodejs一天了,這種異步非阻塞式的程式設計模型仿佛一下子打破了我的思維模式,總有一種根本不會程式設計的感覺。不過從中也确實讓我獲得了很多寶貴的經驗。

這裡暫且記錄一下學習過程中遇到的一些實用的庫吧,給自己一個紀念。

之前寫Python的Flask或者Django的時候,一旦修改了源代碼,背景調試伺服器就會自動檢測到變化,然後restart。是以可以直接在浏覽器上直接重新整理看到最新的結果。而寫了一點點Node代碼的我發現每次都必須先CTRL+C,然後重新運作伺服器端代碼,才能看到最新的結果。

Nodejs隻有在第一次引用到某部分時才回去解析腳本,以後都會直接通路記憶體中解析好的腳本檔案内容。

這在一定程度上确實提高了性能,但是開發的時候真的不是一個好做法。幸好supervisor就是專門用來解決這個問題的。

其實就是對node的一個包裝。比如我寫了一個簡單的伺服器程式sample.js。

正常運作的話是

但是這樣不能實時檢測到腳本檔案的變化,這時就可以讓supervisor出場了。

指令本身也會給我們很多提示性的内容。

不難看出,supervisor啟動了一個子程序來處理node腳本,然後本身檢測檔案變化,實時做處理。

rs指令代表着restarting,即我們可以手動的讓伺服器腳本重新啟動。

調試代碼的一款比較好用的線上調試工具。使用者界面看起來還算不錯。

首先要連結待調試檔案。

其中xxx.js就是你要調試的出錯的node檔案。

接下來就是啟動。

檢視和操作

這時打開浏覽器,輸入

即可通過漂亮的UI來執行調試指令了。

如下圖:

Nodejs 實用工具集筆記
需要注意的是:node-inspector内部依賴于webkit,是以隻能在以webkit為核心的浏覽器上運作。

類似于Python中的requests, 在Nodejs中也有這麼一個很好用的網絡請求庫,那就是SuperAgent。下面簡單的來測試一下。

我這邊直接按照自己的了解,寫了一個post請求方式,來擷取圖靈機器人接口内容的示例。代碼如下:

運作代碼獲得的資訊如下:

本來我想自己寫一遍這些基礎的用法的,但是看到了官網的簡介,甚是簡潔,邏輯清晰,示例優雅。然後我覺得沒必要重複造輪子了,下面兩個連結看完之後基本上就能熟練掌握了。

談到了SuperAgent類似于Python中的requests, 那麼在擷取到網頁内容之後,解析内容的話,在Python中有BeautifulSoup這麼個神器,那麼在Nodejs中呢?

答案是cheerio。功能上類似于BeautifulSoup,可以作為一款優秀的解析器來使用。

沒有一個例子的話,感覺不怎麼像回事。下面還是來個簡單的例子。

執行如下指令

即可看到如下内容。

Nodejs 實用工具集筆記

為了避免重複造輪子, 我還是把看到的很經典的連結放過來吧。相信中英文結合着看,運用BeautifulSoup 和JQuery的思維模式,對于cheerio 就不在話下了。

到目前為止,對于簡單的資料抓取掌握了這幾個庫就不成問題了。然而實際上,這還遠遠不夠。對于這個工具清單,有時間的話,再回來更新吧。