轉載原文:http://www.csdn.net/article/2013-08-28/2816731-absolute-beginners-guide-to-nodejshtml
Node.js的教程並不缺少,但有大部分教程針對已有Node.js基礎的開發者。「我已下載了Node.js,可我如何開始呢?」如下教程是專門針對Node.js初學者,文中將經過實例分享,一步步教你如何開始Node.js之旅。 node
什麼是Node.js?web
不少初學者並無真正地理解Node.js究竟是什麼。nodejs.org網站中的描述也沒有多大幫助。數據庫
首先要清楚Node不是一個Web服務器,這十分重要。它自己並不能作任何事情。它沒法像Apache那樣工做。若是你但願它成爲一個HTTP服務器,你必須藉助它內置庫本身編寫。Node.js只是計算機上執行代碼的另外一種方式,它是一個簡單的JavaScript Runtime.express
安裝Node.jsnpm
Node.js的安裝十分容易。只需在這裏下載知足你須要的安裝程序便可。json
已安裝好Node.js,下一步作什麼?api
安裝結束後,你能夠輸入一個新命令「node」。使用該「node」命令有兩種不一樣的方法。第一種不帶任何參數,將打開一個交互式Shell「>」(REPL: read-eval-print-loop),你能夠在這裏執行JavaScript代碼。數組
上面案例中,我在Shell中鍵入了「console.log('Hello World')」,並敲回車。Node便開始執行該代碼,並顯示剛纔記錄的信息,同時打印出「undefined」。這是由於每條命令都會返回一個值,而console.log沒有任何返回,故輸出「undefined」。瀏覽器
Node命令的另外一種用法是執行一個JavaScript文件。這是咱們平時最經常使用的方法。
hello.js
該案例中,我將「console.log('Hello World');」命令存入一個文件中,並將該文件做爲node命令的參數。Node運行文件中JavaScript代碼,並輸出「Hello World」。
案例一:文件的輸入與輸出
Node.js包含一組強大的庫(模塊),能夠幫助咱們作不少事。第一個案例中,我將打開一個Log文件,並對它進行解析。
example_log.txt
該Log數據什麼意思並不重要,基本能夠肯定每條信息都包含一條數據、一個字母和一個值。我但願將每一個字母后面的值進行累加。
咱們要作的第一件事是讀出文件的內容。
my_parser.js
經過內置的文件(fs)模塊,咱們能夠很容易進行文件的輸入/輸出操做。fs模塊有一個readFile方法,該方法以文件路徑、回調函數爲參數。該回調函數在完成文件讀取後調用。文件數據讀取後存儲在Buffer類型中,爲基本的字節數組。咱們能夠經過toString()方法將它轉化爲字符串。
如今咱們對它進行解析。
my_parser.js
如今,當你將該文件做爲node命令的參數時,執行該命令將打印出以下結果,執行完畢後退出。
我大部時候將Node.js做爲腳本使用,正如上面所展現的那樣。它更易於使用,是腳本程序有力的替代者。
異步回調
正如在上例中看到的那樣,Node.js典型的模式是使用異步回調。基本上,你告訴Node.js要作的事,它執行完後便會調用你的函數(回調函數)。這是由於Node是單線程的。在你等待回調函數執行過程當中,Node可繼續執行其餘事務,沒必要被阻塞直到該請求完畢。
這對於Web服務器尤爲重要。在現代Web應用訪問數據庫的過程當中特別廣泛。當你等待數據庫返回結果的過程當中,Node能夠處理更多請求。與每次鏈接僅處理一個線程相比,它使你以很小的開銷來處理成千上萬個並行鏈接。
案例二:HTTP服務器
Node內建有一個模塊,利用它能夠很容易建立基本的HTTP服務器。請看下面案例。
my_web_server.js
在上面,我說是的基本HTTP服務器。該例中所建立的並非一個功能全面的HTTP服務器,它並不能處理任何HTML文件、圖片。事實上,不管你請求什麼,它都將返回「Hello World」。你運行該代碼,並在瀏覽器中輸入「http://localhost:8080」,你將看見該文本。
如今你可能已經注意到一些不同的東西。你的Node.js應用並無退出。這是由於你建立了一個服務器,你的Node.js應用將繼續運行,並響應請求,直到你關閉它。
若是你但願它成爲一個全功能的Web服務器,你必須檢查所收到的請求,讀取合適的文件,並返回所請求的內容。值得高興的是,有人已經幫你作了這個艱難的工做。
案例三:Express框架
Express爲一個框架,可以使建立網站的過程十分簡單。你首先須要安裝它。除了node命令,你還須要訪問「npm」命令。利用該工具,你能夠訪問社區所建立的龐大模塊集。其中之一就是Express。
當你安裝了一個模塊,它將出如今應用程序所在目錄的「node_modules」文件夾中。如今咱們能夠利用Express來建立一個基本的靜態文件服務器。
my_static_file_server.js
如今你已建立了一個強大的靜態文件服務器。你能夠經過瀏覽器請求訪問你放在public文件夾中任何文件,並進行展現,包括HTML、圖片等任何東西。好比,把一個名爲「my_image.png」的圖片放在public文件夾中,你能夠在瀏覽器中輸入「http://localhost:8080/my_image.png」來訪問該圖片。固然,Express還有不少特性,你能夠在之後的開發中繼續探索。
NPM
上面咱們已經接觸到了npm,但我仍想強調一下在Node.js開發過程當中該工具的重要性。它有成千上萬個模塊可幫咱們解決遇到的大部分典型問題。在從新發明輪子以前,記得檢查一下npm中是否有相應功能。
上一例中,咱們手動安裝了Express。若是你的程序包含不少「依賴」(Dependency),那再利用該方法安裝它們就不合適了。爲此npm提供了一個package.json文件。
package.json
package.json文件包含了應用程序的基本信息。其中「dependencies」部分描述了你想安裝模塊的名稱和版本。該案例,接受Express 3.3的任何版本。你能夠在該部分列出你想要的全部依賴。
代替以前一個個安裝每一個依賴,如今咱們能夠運行一個命令,便可將它們所有安裝完成。
運行該命令,npm將在當下文件夾中查找「package.json」文件。一旦找到,便可安裝所列出的全部依賴。
代碼的組織
在大部分應用程序中,你的代碼每每被分割到幾個文件中。如今讓咱們把最開始案例中的Log分析腳本分離出來。這樣該程序將更易於測試與維護。
parser.js
在此建立了一個新文件,來存放Log分析腳本。這僅僅是一種標準JavaScript,還有不少方法可用來封裝該代碼。我選擇從新定義一個JavaScript對象,這樣更容易進行單元測試。
該程序中最重要的部分是「module.exports = Parser;」這一行代碼。它告訴Node從該文件中要輸出的內容。在該例中,我輸出了構造函數,用戶能夠用Parser對象來建立實例。你能夠輸出任何你想要的。
如今咱們看一下,如何導入該文件,來使用Parser對象。
my_parser.js
如模塊同樣,文件被引入其中,你須要輸入路徑,而非名稱。
總結
但願該教程能夠幫助到你。Node.js是一個強大、靈活的技術,能夠幫助解決各類各樣的問題。它已經超出了咱們的想像。(編譯:陳秋歌 審校:夏夢竹)