Node.js學習:介紹篇
Node.js 是個很棒的新技術,但是除非您本來就是個很厲害的 Javascript 工程師,否則要想熟練的掌握這門技術還是有點讓人小惱火的。可這也是為啥我們要來學習這個系列!如果您是真打算學習使用 Node.js , 這兒算是來著了。
初步介紹
在這個系列里,我們使用 Node 來創建一個簡單的博客引擎,就象他們所使用的 Ruby 和 Rails等工具做的一樣。這一系列文章主要告訴你,Node 是如何工作的,也包括他是如何和當前很流行的網站開發的框架協同工作的,比方說Express 或者是 Getty. 看完這個系列應該能讓你了解 Node 的內部工作機制,可以做內部代碼調整,以達到您的需要。
安裝
在我開始介紹什么是 Node, 以及為啥要用他之前,讓我們先從Node 的安裝開始吧。因為這安裝說起來容易,可也確實要花點時間。
Node 還是很新的技術,做為現在很活躍的開發環境,最好還是用源碼進行安裝。 換句話說, Node 的安裝并沒有太多依賴條件, 所以他的編譯復雜性并不會比你以前安裝過的那些程序更難。 可以在 Node.js的官網上面拿到所需的代碼。 瀏覽下載頁面,你會發現有很多選擇。 如果您要做 Git安裝,那么就做一個代碼庫的鏡像,然后從那里直接安裝。 或者你也可以直接從這里提供的鏈接下載 tarball 文件來安裝。我會從 tar 文件進行安裝。
下載過程需要花點時間,那我們就用這個時間來說一個重要的事,在 Windows 上要給Node 留一個端口,會有專門的指導文件告訴你,如何把 Cygwin 或者是 MinGW安裝在Windows 上面。網站上還有一些二進制的安裝包,也可以選來安裝,在寫這篇文章之時,主要的安裝環境還就是 Unix 和 Linux. 在 Windows安裝時,你可以點安裝指導文件,跟著安裝指導文件的說明一步步來,或者也可以安裝在 Linux 的各個版本上,比方說Ubuntu.
下載完后,只要用 tar –vxf 解開安裝包,并且用cd 進到該解壓縮創建的目錄之下。首先我們得執行 ./configure , 然后 make 最后是make install. 這個過程要花點時間,所以讓安裝在后臺運行吧,我們趁這個時間再聊點別的,為啥Node會在網站開發圈引起這么大的振動?
介紹 Node
如果您是第一次接觸 Node 相關的文章或視頻,可能會嘀咕,有那么多成熟的網站開發的框架可選了,這Node 還有啥特別的地方值得學習。對于初學者來說,這個理由很重要: Node 是服務器上的 JavaScript, 讓我們面對他,如果您做為網站開發人員,愛他也好恨他也罷,在某種程度上都得和 JS 一起工作。使用 JS做為您后端開發語言,就和在前端一樣好,你也無須要不在不同的內容間不斷切換。
好,我知道你現在可能在想: 所以 Node 就是運行在服務器上的JavaScript嘛,那沒問題,但過去也存在了很多試圖在服務器上運行的 JavaScript框架,最后不都死翹翹了。
什么讓 Node和其他應用不同?
那么,簡單來說: Node 就是服務器端JavaScript,也是做的最好的。 對于那些傳統的,利用 JS的, 使用 MVC 網站框架的 ,我只能說Node和他們都完成不一樣, 什么意思呢?我們從V8開始講起。
V8算是一款精巧的可以實時進行編譯的應用,他能夠讓用戶使用其他動態語言,比方說:Python 和Ruby, 這些動態加載語言的速度達到象 javascript 一樣快。利用一些基準工具測測,你會驚到的。 V8 JavaScript 一般會是在在某些 JVM為基礎的程序之上的,比方 Clojure 以及 java, 以及 編譯語言,比方 在很多情況下使用的 Go.
另外一個重要的陳述就是事件 I/O, 這事兒就大了。 在創建一個網站服務器時,一般你有兩個選擇,去處理多并發連接請求。 第一: 傳統的路線是采用網站服務器,比方 Apache,他是利用線程來處理進來的連接請求。 另外一個方法,就是采用 Node 以及另外一些非常快的現代服務器架構,比方 Nginx 和 Thin,他們都是在事件循環中使用一個單的,非阻塞型的線程。這里就是為啥要用 javaScript ,最閃亮的原因了, 因為JavaScript 設計出來就是被應用在這種單線程事件事件循環為基礎的環境下:瀏覽器! Javascipt 可能在這種封閉的環境下傳遞信息,讓以事件為基礎的程序非常簡單。 你要做的就是調用一個函數,去執行一些類型的 I/O,然后把相應的信息傳遞給回遞函數,javaScript自動創建一個終止,確保正確的狀態會被長久的保留,甚至在調用函數過了很長時間,或者已經失效。但這些都是一些術語,我相信你更想看一些實際的代碼。 我也將加快速度,等安裝完成,我們就可以開始試試我們最新的,好玩的 node了。
確定安裝
查看一下后臺,似乎我們的安裝程序已經完成; 讓我來快速檢查一下,確定程序已經安裝好了。 做這個很簡單:就在終端命令行里運行一下 node – version 即可, 你應該可以看到一些提示信息,告訴你當前正在運行的 Node 的最新版本是什么, 我這里的,是 0.4.5 當你看到這些提示信息,就表示 Node 已經準備好了,您可以開始寫第一個 Node 的應用了。使用 cd命令回到根目錄下,創建一個新的目錄以包括我們這個項目的所有代碼。 我這里就把這個目錄取名叫做 blog, 然后使用cd 命令進到該目錄下。
Node – 服務器端的框架
不同于其它的框架,Node 并不會就嚴格限定于做為網站開發。實際上,你可以把 Node 當成一個框架,用在各種服務器端的開發。使用 Node 你可以建立IRC 服務器,聊天室服務器,或者,在后續的一些教程中會提及的, 做為http 的服務器。 對于一個程序員來說,所有的語言介紹都來自于 “Hello World”的經典事例,我們也從這兒開始吧。
Hello World
首先我們創建一個文件名字叫做 app.js. 現在Node 已經可以提供大量的庫文件,所以在開發以事件為基礎的服務器來說,會相當容易。 要想使用這些庫文件,你只需要簡單的在所要使用的函數里面包括進去這個模塊就好了。 需要調用的函數會返回一個對象,以表示你要傳遞進來的模塊,您可以把這個對象抓取到變量中。在創建 HTTP 服務器時, Node 就會提供一個 http 的庫。 讓我們繼續前進吧,請求 HTTP 庫,同時把返回的對象賦給 http變量。
接下來,我們就要真正開始創建服務器了。 http 庫文件提供了一個函數,叫做 CreateServer. 該函數啟動一個回調函數,并且返回一個新的服務器對象。
當這個HTTP請求建好以后, 監聽功能就會被調用, HTTP 請求就會建立成對象,同時響應會被傳遞進函數中。 我們可以再次使用監聽功能中的響應對象,把響應送回到瀏覽器上。 要做到家個, 我們要先出正確的 HTTP頭信息, 這里,我們調用響應對象中的 writeHead 函數.
writeHead 函數帶有幾個參數。 頭一個就是一個整數,表示的是請求的狀態代碼,我們這里應該是 200, 就是表示 OK的意思。 第二個是一個對象容器,里面裝滿了所有的響應頭文件,我們后面都要用到設置的。在這個例子里,我們只是把 content-type設置為 text/plain, 表示我們要求返回的都是純文本。
一旦我們設置好了頭文件,就可以傳送這些數據了。 要做這事,你需要調用 write 函數,并把要傳遞的數據傳遞給他。 在里,讓我們在響應對象里面調用 write 函數 并且把字符串 hello world 傳遞給他。
實際傳送響應時,我們需要給服務器一個信號,表示我們已經完成了封裝響應; 這個功能是通過調用 response.end來實現的。 end 函數也允許我們傳數據, 所以我們就可以簡化一下服務器端的代碼,把早前我們調用的 write 函數去掉,而是把 Hello World 這個字串放在 end 函數里面進行傳遞。
現在我們已經創建好了服務器,我們就需要啟動他去監聽新的請求了。
這個就很簡單了:在服務器的對象內調用監聽函數,并給他傳遞一個端口參數去監聽; 在這個例子里,我們的端口號是 8000. 監聽函數也可以帶其它可選的參數,比方說主句的 URL, 但因為我們這個例子是在本地運行的,所以我們暫時先不用這個參數。
最后讓我們也打印出一些信息來,以便于我們真正能知道,服務器正在運行,同時也能看到他正在監聽哪個端口以得到新的請求。你也可以從console.log文件里面得到這些信息。現在可以開始了,通過調用 Node來運行應用并且傳遞給他我們要執行的文件名。
不深思則不能造于道。不深思而得者,其得易失。
名人名言- 曾國藩
- By 優聯實達
- 2015-10-30
- 1627
- 公司新聞,網站開發,網站設計,UI