Node.js的銳3服務器端運行
4月5日,2010在7:45 am由DAV玻璃| 開發 | 5評論對於那些不知道Node.js的 ,這裡是我如何形容它:
Node.js的是一個服務器端的,無阻塞的,事件驅動的運行時為JavaScript V8 JavaScript引擎的頂部建。 認為Node.js的一個可行的替代你的服務器端腳本語言坐在後面像HTTP服務器, Apache或nginx的 。
我最近一直在玩與Node.js的周圍看到所有的興奮。 所以自然我看到怎樣才能得到銳3下運行節點。 3 YUI的了解背後的架構 ,我想,它不會太硬,得到它運行。
由於Node.js的不提供原生的DOM,你可能會感到奇怪,“為什麼要使用一個JavaScript框架?”嗯,銳3是不是所有的DOM操作 - 它也包含一套強大的類/對象管理工具,更遑論我們強大的自定義事件。 所有這些工具都立即在服務器端編程有用的。
入門
首先,它應當指出YUI將裝入在全球範圍內的Node.js,因為所有YUI的3個模塊調用YUI.add在文件的開頭。 YUI的對象將自己分配到的exports每CommonJS的規範的對象,但是,一旦使用一個模塊,它需要一個全球性的YUI的重視。 (這可能是我們的工作在未來的周圍的東西,但是這就是這種探索的起點。)
我需要做的第一件事是裝載機工作。 這樣做是很簡單,我只用了3內置在YUI的工具。 YUI的3個模塊系統是強大的和易於配置,使用YUI.add方法,我能創造一個新的模塊。 get 這個新的模塊接受客戶端實用程序的默認參數,而不是創建一個腳本節點,包括銳這樣它從CDN和當前進程加載數據到磁盤或從銳。 下面是一個簡單的代碼片段,顯示如何做到這一點:
YUI.add('get'的功能(Y){ Y.Get =函數(){}; Y.Get.script =功能(CB){ 功網址= Y.Array(S),URL,我,L = urls.length; 為(i = 0; <L;我+){ URL =網址[我]; (網址[I]匹配(/ ^ HTTPS:?\ / \ / /)){ URL = url.replace JS(/ \ $ /,''); } y.log(網址:“+ URL,'信息','得到'); / /不需要被封鎖,所以不會阻止。 require.async(URL,函數(MOD){ 通過(CB); }); } }; / /只要把這個,所以我們沒有得到錯誤 Y.Get.css =功能(CB){ y.log(“載入CSS:'+'調試','得到'); 通過(CB); }; });
現在我已經得到加載腳本,我希望能夠跟踪它是做什麼的。 YUI的3包括一個配置屬性,稱為logFn ,可以記錄在本地控制台日誌記錄可能不存在的環境下的支持。 我用這個配置屬性添加一個選項,以全球的YUI YUI的對象,告訴排放日誌消息時,它應該使用一個特殊的功能。 這裡有一個看看這個函數:
logFn:功能(STR,T,M){ T = T | |'信息'; M =(M)? “(”+ M +')':''; VAR O = FALSE; (STR的instanceof對象| | str中的instanceof數組){ / /如果我們用這個嗎? (str.toString){ STR = str.toString(); }否則{ STR = sys.inspect的(STR); } } / /輸出日誌信息到stderr sys.error('['+ t.toUpperCase()+']'+ M + STR); }
現在,我已經銳3加載和日誌消息,下一步是測試系統。 我決定加載我YQL的庫模塊和嘗試使YQL的要求,。 事實證明,這比我預想的更容易。 YQL的模塊使用Get以來,它的工作開箱。 下面是它的一個示例控制台打印輸出,對我的GitHub的表運行YQL的查詢。
[INFO]:(YUI)模塊要求:[陣列]:3 [信息]:(YUI)模塊丟失:[陣列]:3,3 [信息]:(YUI)取回裝載機:http://yui......oader/loader-min.js [信息]:(得到)網址:http://yui.yahooapis.co.../loader/loader-min.js [信息]:(YUI)模塊的要求:[陣列]:11 [信息]:(YUI)模塊丟失:[陣列]:8 8 [信息]:(YUI)使用裝載機 [信息]:(得到)網址:http://yui.yahooapis.com/combo?3.1.0/build/du ...... ...........ild /畫廊YQL /畫廊YQL-debug.js [生活]:(基地)構造函數調用 [信息]:(屬性)屬性的構造函數調用 [生活]:(基地)init調用 [信息]:(事件)yui_3_1_0_1_12703536585676:射擊的:初始化 [信息]:(屬性)initValue為初始化:假 [信息]:(屬性)添加屬性:初始化 [信息]:(屬性)initValue銷毀:假 [信息]:(屬性)添加屬性:破壞 [信息]:(屬性)添加屬性:初始化 [信息]:(事件):射擊的:富 [信息]:(事件):一:美孚 - >子:yui_3_1_0_1_127035365856711 [調試]:(MyApp的)美孚射擊 [信息]:(獲取)網址:http://query.yahooapis.com/v1/public/yql?q=select%20%20fro ....... bles.env [信息]:(事件)yui_3_1_0_1_127035365856715:查詢>子:yui_3_1_0_1_127035365856716 {計數:'1' ,創建:'2010-04-04T04:01:00ž“ 郎:“EN-US ,更新:'2010-04-04T04:01:00 Z“ ,URI:http://query.yahooapis.com/v1/yql“ ,結果: {用戶: {'的gravatar-ID':'d5c18055c50c5b34b0163e0bf0dbf59f 名稱:“DAV玻璃” 公司:[對象] ..... 博客:“http://blog.davglass.com/”的 } } }
因此,所有容易的工作,因為它沒有,我想是時候看到銳3 IO加入支持。 銳3的IO模塊已經支持通過閃存運輸的跨域請求。 我決定將添加只是Node.js.新的運輸 IO的作者托馬斯·沙,是能夠使IO的第三方接受以同樣的方式傳輸,閃存運輸工作。 在這一點上,很容易整合HTTP連接已經Node.js.提供的處理 這使得代碼設計上運行的XDR運輸要在服務器上運行的瀏覽器 - 所有你需要做的是改變傳輸類型,和其他一切工作完全一樣的。
YUI的()。使用('JSON','基地','IO-nodejs',函數(y){ VAR URL ='呻'+'/ yuilibrary.com /畫廊/ API /用戶/ davglass“; Y.io(網址,{ XDR:{ 使用:“nodejs }, :{ 開始:函數(){ y.log(“開始IO','信息','測試'); }, 成功:函數(ID,O){ y.log(Y.JSON.parse(o.responseText)的UserInfo。); } } });
IO模塊工作後,我闡述了使用該庫的建立好玩的東西。 我怎麼建立? 我用銳3和Node.js的建立一個當地的組合服務器。 換句話說,我可以使用YUI 3建立一個工具,它提供銳3 combo'd文件。 這個項目是出奇的容易做的一樣好。 在組合裝載機源,從我的GitHub的帳戶 ,我這裡有一個演示服務器 。
所有的一切,核心銳3公用事業Node.js的工作過程是簡單的感謝銳3的架構。 在我的GitHub的庫Node.js的銳3模塊為我的代碼是如何得到它運行的指令。
請繼續關注我的下一個職位時,我會談論一些額外的實驗我一直奉行自入門銳3在Node.js.運行,
共享和擴展: 書籤del.icio.us Digg它! | reddit!
5評論
很抱歉,評論已被封閉,在這個時候。


巨大的! 偉大的工作DAV感謝:)
評論JoeDev - 2010年4月5日, #
JoeDev - 謝謝!
評論由DAV玻璃 - 4月5日,2010 #
[...]上一篇文章:3銳不再在全球範圍內運行。 我已經做了一些調整,我的nodejs-yui3項目[...]
pingback的由Node.js的,YUI 3 DOM操作......噢,我的! »雅虎用戶界面博客(YUIBlog)的 - 4月9日,2010 #
[...]玻璃YUI的一些很酷的工作和服務器,當他上運行的Node.js和得到的DOM [...]
pingback的才算是Ajax»服務器上Node.js的銳邊渲染 - 4月20日,2010 #
很酷的東西。 這是未來! 也許有一天我們將下降銳UI叫它Y(因為圖書館可能變成是同樣強大的服務器端...)
評論阿瑟·布萊克 - 2010年4月20日, #