一.建立 HTTP 伺服器
前面的 Hello World 程式對於你來說可能太簡單了,因為這個例子幾乎可以在任何語言的教科書上找到對應的內容,既無聊又乏味,讓我們來點兒不一樣的東西,真正感受一下Node.js 的魅力所在吧。Node.js 是為網路而誕生的平台,但又與 ASP、PHP 有很大的不同,究竟不同在哪裡呢?如果你有 PHP 開發經驗,會知道在成功運行 PHP 之前先要配置一個功能強大而複雜的 HTTP伺服器,譬如 Apache、IIS 或 Nginx,還需要將 PHP 配置為 HTTP 伺服器的模組,或者使用FastCGI 協議調用 PHP 解譯器。這種架構是“瀏覽器 HTTP 伺服器 PHP 解譯器”的組織方式,而Node.js採用了一種不同的組織方式,3-1 所示。我們看到,Node.js 將“HTTP伺服器”這一層抽離,直接面向瀏覽器使用者。這種架構從某種意義上來說是顛覆性的,因而會讓人心存疑慮:Node.js作為HTTP伺服器的效率足夠嗎?會不會提高耦合程度?我們不打算在這裡討論這種架構的利弊,後面章節會繼續說明。
讓我們建立一個 HTTP 伺服器吧。建立一個名為 app.js 的檔案,內容為:
<喎?http://www.bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+PHByZSBjbGFzcz0="brush:java;">var http = require('http');http.createServer(function(req, res) {res.writeHead(200, {'Content-Type': 'text/html'});res.write('Node.js');res.end('
Hello World
');}).listen(3000);console.log("HTTP server is listening at port 3000.");
接下來運行 node app.js命令,開啟瀏覽器訪問 http://127.0.0.1:3000,即可看到效果。
用 Node.js 實現的最簡單的 HTTP 伺服器就這樣誕生了。這個程式調用了 Node.js 提供的http 模組,對所有 HTTP 要求回覆同樣的內容並監聽 3000 連接埠。在終端中運行這個指令碼
時,我們會發現它並不像 Hello World 一樣結束後立即退出,而是一直等待,直到按下 Ctrl +C 才會結束。這是因為 listen 函數中建立了事件監聽器,使得 Node.js 進程不會退出事件迴圈。我們會在後面的章節中詳細介紹這其中的奧秘
提示:
有時候我們可能想修改完內容重新整理頁面想看到效果,無論你修改了代碼的哪一部份,都必須終止Node.js 再重新運行才會奏效。這是因為 Node.js 只有在第一次引用到某部份時才會去解析指令檔,以後都會直接存取記憶體,避免重複載入,這時候supervisor 可以協助你實現這個功能,它會監視你對代碼的改動,並自動重啟 Node.js。使用方法很簡單,首先使用 npm 安裝 supervisor:
$ npm install -g supervisor
如果你使用的是 Linux 或 Mac,直接鍵入上面的命令很可能會有許可權錯誤。原因是 npm需要把 supervisor 安裝到系統目錄,需要管理員授權,可以使用 sudo npm install -g supervisor 命令來安裝。接下來,使用 supervisor 命令啟動 app.js:
$ supervisor app.js
當代碼被改動時,啟動並執行指令碼會被終止,然後重新啟動