首頁 >web前端 >js教程 >了不起的node.js閱讀筆記之node.js中的特性_node.js

了不起的node.js閱讀筆記之node.js中的特性_node.js

WBOY
WBOY原創
2016-05-16 16:25:121012瀏覽

環境的變化帶來了技術大躍進,機會和挑戰同時到來。基於我js也沒學,只好趕鴨子上架一起學了。 (>﹏<)

1.先讀讀書

  一開始就不知死活地看《深入淺出node.js》,弄得團團轉,看完才知道這本書是要一定基礎的。在網路上搜刮到了41頁的《node入門》,自己學著搭建了一個Web應用。並且在刷新成就感後,就抱讀《了不起的node.js》。現準備看完這本書後再回讀《深入淺出node.js》。

2.搭建環境 運行git上的例程(3次報錯)

  在官網下載msi後,一路next。輸入指令npm install時,報錯"npm ERR! not found: git"。原因是新電腦沒有用git。

  安裝外部依賴套件時,報錯"gyp ERR! configure error",原因也是Python環境沒有。而且這個依賴套件只能在低版本下安裝。最後一次報錯是"MSBUILD:error MSB3428:未能載入Visual C 元件"VCBuild.exe"",在安裝.net framework 2.0 SDK和mvs2005後還是報錯。果斷棄了。

3.第一個Web應用

  在運行完"Hello World"後,開始編寫一個完全基於Node的Web應用。首先需要啟動伺服器模組,http模組中的createServer函數傳回的物件有一個listen([PORT])方法監聽連接埠。這個函數的參數很奇怪,是一個函數定義。在JavaScript中,一個函數可以作為另一個函數接收一個參數,參數函數就叫匿名函數。而使用這種方法的原因是node採用了基於事件驅動的回呼。當伺服器在單一進程接收到一個請求時,就會呼叫這個函數來處理這個請求。當有對應的事件發生時,createServer函數就會呼叫這個函數來回調。

  在完成接收http請求後,我們就要處理請求了。首先,我們抽像地把請求提出不同的URL和GET、POST參數。這裡用到了兩個內部模組URL(解析URL)、Query String(處理查詢字串)。並且透過依賴注入的方式把router模組加進去。接著,需要完成處理請求的模組,才能完善路由。請求先全部透過一個物件(handle)進行模組間的傳遞,並讓處理程序能做出回應。一般來說,讓請求處理程序透過onRequest函數直接傳回(return())他們要展示給使用者的資訊。不過,在進行阻塞操作時會非常耗時,所以我們要使用非阻塞操作。使用回調,透過將函數作為參數傳遞給其他需要花時間做處理的函數。相較於採用將內容傳遞給伺服器的方式,我們這次採用將伺服器「傳遞」給內容的方式。就是將response物件(從伺服器的回呼函數onRequest()取得)作為函數參數透過路由傳遞給處理程序。這樣,處理程序就可以呼叫該物件上的函數。

  接下來再進行處理環節,透過表單上傳圖片,這裡用到了外部依賴套件formidable來接收圖片。這個模組就是用來處理表單和上傳檔案的。首先使用var form = new formidable.IncomingForm();來取得表單物件。這個物件的parse方法可以解析處理表單資料。我們就很簡單地把文件保存起來。而儲存檔案則使用了fs模組。透過重新命名方法來指定已儲存的位置,透過使用同步的方法renameSync()可以使得保存檔案行為先於展示圖片行為。

  展示圖片則十分簡單,透過fs的readFile方法讀取文件,在其回呼函數中使用response.write(file, "binary")就可以在瀏覽器中展示圖片。

  總結一下:透過這個例程,我們了解到了node.js中的特性,如單執行緒、非同步、事件驅動等。其中一些抽象概念也透過例程展示了一遍,但仍需深入了解。透過例程學習就是需要在不懂時查閱資料,這種學習方法也是很好的Input-Person-Output型的方法。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn