Skip to content

Instantly share code, notes, and snippets.

@chiehwen
Last active August 29, 2015 14:05
Show Gist options
  • Select an option

  • Save chiehwen/eef3e06baf3afb970b3d to your computer and use it in GitHub Desktop.

Select an option

Save chiehwen/eef3e06baf3afb970b3d to your computer and use it in GitHub Desktop.

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 模組打造一個簡單的對話伺服器

// 載入 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 模組打造一個 HTTP 伺服器

// 載入 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 服務

RESTful Web Service 之所以變得這麼流行,是因為使用起來遠比 SOAP 來的容易。

建立一個靜態檔案伺服器

處理伺服器的 Error 事件

在 Node 裡頭,所有有繼承 EventEmitter 的 class 都有可能發出 Error 事件。

Connect 不屬於 Node 的核心模組,是來自第三方的社群模組。你可以使用下面的指令來安裝它:

% npm install connect --save

使用 Express 打造一個簡單的 Blog

定義路由 (routes)

  • all: 取得所有的請求
  • get: 取得 GET 的請求
  • post:
  • put:
  • del:

使用 del 作為 delete 方法的縮寫,並且請記住在 JavaScript/ECMAScript 與 Node.js 裡頭,delete 是一個有效的操作,我們可以使用該操作來從物件中移除一個屬性,例如:delete books.nodeInAction

為你的 Blog 增加 Jade

  • layout.jade -
  • index.jade -
  • article.jade -
  • login.jade -
  • post.jade -
  • admin.jade -

你有時候會在 Github 上看到有些專案使用

使用 Express 打造一個聊天程式

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment