首先描述產生這篇隨筆的場景:我需要獲取專案在jenkins構建的最新Javascript Coverage顯示在供管理層次檢視的專案情況Report上,但是由於jenkins沒有直接的API取得資料所需資料,所以我們只能從自建的容器釋出Javascript Coverage資料API,供Report專案使用。
由於採用簡單的資料分析,只是Host一個簡單的web Server,所以本人不喜歡Tomcat,IIS這類大型工具,顯得有點殺雞用牛刀,班門弄斧。我更喜歡node.js這類簡易的web容器。所以項目採用node.js,並node.js天然的javascript與html操作的天然一體,藉助DOM結構使得解析Html更容易,簡潔。
Node.js解析HTML DOM的當然是htmlpaser,jsdom。然而個人更喜歡jQuery的風格,與web jQuery的統一API,所以選擇了node-jquery.其代碼部署在Github的https://github.com/coolaj86/node-jquery.
下面是本人寫個一個簡單demo: 抓取Github Popular project列印在控制檯輸出。
- var $ = require(`jquery`);
- String.format = function() {
- var s = arguments[0];
- for (var i = 0; i < arguments.length - 1; i++) {
- var reg = new RegExp("\{" + i + "\}", "gm");
- s = s.replace(reg, arguments[i + 1]);
- }
- return s;
- };
- $.get("https://github.com/popular/forked",function(html){
- var $doc = $(html);
- console.log("No. name language star forks ")
- $doc.find("ul.repolist li.source").each(function(i,project){
- var $project = $(project);
- var name = $project.find("h3").text().trim();
- var language = $project.find("li:eq(0)").text().trim();
- var star = $project.find("li.stargazers").text().trim();
- var forks = $project.find("li.forks").text().trim();
- var row =String.format("{4} {0} {1} {2} {3}",name,
- language,star,forks,i + 1 );
- console.log(row);
- });
- });
此專案寄宿在我Github https://github.com/greengerong/node-jquery-demo。僅供瞭解node-jquery學習demo,歡迎指教。