Node 非常適合用來打造網路程式,理由是大部分的網路應用都涉及大量的 I/O 處理。
Buffer 是 Node 開發者特別準備的資料形態。 你可以把 Buffer 看成 C 裡頭的 malloc() 函式或 C++ 中的關鍵字 new。 所有的 Stream class
剛進入 Node 開發的初學者,會面對到兩個難題:
- 如何組織專案的程式碼
- 如何進行事件驅動的非同步程式設計
要掌握事件驅動的非同步程式設計,可能需要花一點時間轉換過去的開發思維。
Node 的模組系統避免了對於全域變數的污染,進而避免命名空間 (Namespace) 的衝突,並且增加程式碼的可重複使用性。
require() 是 Node 中少數幾個使用同步 I/O 操作的模組, require() 及其它同步 I/O 的操作,通常只使用在程式剛執行的時候。
環境變數 NODE_PATH 可以改變 Node 模組預設的路徑。
% export NODE_PATH="'$NODE_PATH:$(npm bin -g)'"如果你之前有過前端的網頁開發經驗,那你已經有過非同步的開發經驗了。是的,像是使用滑鼠的事件觸發,你就是在進行非同步的程式設計。 回調函式 (callback function) 與事件監聽 (event listeners) callback 通常是用來定義一次性的
callback 被當作
當有人在瀏覽器進行滑鼠點擊的操作時,滑鼠點擊就是一個需要被處理的事件;當有人向 Node 所建立的 HTTP 伺服器發出一個請求 (request),這請求也是一個需要被處理的事件,你需要監聽該請求事件,並撰寫一些程式對其處理。
事件發射器 (event emitter)
Node 有很多核心功能都繼承於 EventEmitter
// 載入 net 模組
var net = require('net');
// 存取在 net 物件中的 createServer() 方法
var server = net.createServer(function(socket) {
// 處理來自客戶端傳入的訊息
socket.on('data', function(data) {
socket.write("Hello!!");
});
// 當連線中斷後,在客戶端顯示『您已經中斷連線!』
socket.on('end', function() {
console.log('連線中斷');
});
socket.write("您已經中斷連線!");
});
// 綁定 8888 埠口,讓伺服器可以監聽請求的事件
server.listen(8888, function() {
console.log('伺服器運作中在 http://127.0.0.1:8888');
});// 載入 http 模組
var http = require("http");
// 存取在 http 物件中的 createServer() 方法
http.createServer(function(request, response) {
// 告訴伺服器可以接受傳入哪種類型的檔案
response.writeHead(200, {"Content-Type": "text/plain"});
// response.write() 讓伺服器輸出一些訊息
response.write("Welcome to Node.js World.");
// 結束與伺服器的互動
// response.write() 與 response.end() 可以合縮成一句
response.end("Node 伺服器結束");
}).listen(8888); // 綁定 8888 埠口,讓伺服器可以監聽請求的事件
console.log('伺服器運作中在 http://127.0.0.1:8888');RESTful Web Service 之所以變得這麼流行,是因為使用起來遠比 SOAP 來的容易。
在 Node 裡頭,所有有繼承 EventEmitter 的 class 都有可能發出 Error 事件。
Connect 不屬於 Node 的核心模組,是來自第三方的社群模組。你可以使用下面的指令來安裝它:
% npm install connect --save定義路由 (routes)
- all: 取得所有的請求
- get: 取得 GET 的請求
- post:
- put:
- del:
使用 del 作為 delete 方法的縮寫,並且請記住在 JavaScript/ECMAScript 與 Node.js 裡頭,delete 是一個有效的操作,我們可以使用該操作來從物件中移除一個屬性,例如:delete books.nodeInAction
- layout.jade -
- index.jade -
- article.jade -
- login.jade -
- post.jade -
- admin.jade -
你有時候會在 Github 上看到有些專案使用