# 3.4.6 Node.js
### 3.4.6 Node.js
Node.js是JavaScript在服務器端編程的一種應用,它由Ryan Dahl在2009年發明。Node.js采用了一種事件驅動、異步IO的方式來響應HTTP請求,這與上面介紹的其他編程技術都大不相同。異步IO的好處在于它能用單線程處理高并發;同時這也意味著在編程中大量使用回調函數。下面的示例程序說明了這一點:
```
var http = require('http');
http.createServer(function(request, response) {
response.statusCode = 200;
response.setHeader('Content-Type', 'text/plain');
response.write("The following is what I got:\n");
request.on('data', function(chunk) {
response.write(chunk);
}).on('end', function() {
response.end("\nThat's all!");
});
}).listen(8090);
```
在Node.js中,request的消息主體(message body)是通過“data”事件分段讀入的,并由“end”事件標記結束:
```
request.on('data', function(chunk) {
//...
}).on('end', function() {
//...
});
```
在這個例子中我們返回收到的請求消息主體、并在頭、尾各加上一句話作為應答。
要運行程序,在命令行上執行(假設程序保存在文件echo.js中)[1](#fn_1):
```
node echo.js
```
然后通過curl客戶端來訪問它(我們現在要通過POST方法發送一些消息給服務器,通過瀏覽器沒法簡單做到):
```
curl http://localhost:8090/ -d name=Bob
```
其中 “-d name=Bob” 就是我們發送的請求消息主體[2](#fn_2)。
請動手操作一下看看結果是什么。
關于Node.js的更多介紹,請參考這篇官方文檔:<https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/>
關于單線程異步并發模式的優點和缺點,請參考Wiki:<https://en.wikipedia.org/wiki/Node.js#Threading>
> 1. 要運行這個程序,請先安裝Node.js:<https://nodejs.org/en/download/>[?](#reffn_1 "Jump back to footnote [1] in the text.")
> 2. 這個curl命令模擬瀏覽器的表單(form)提交,用POST方法發送數據,同時設定Content-Type為application/x-www-form-urlencoded。你可以試著指定多個“-d”參數,每個代表表單的一項內容,它們會合并到一起。[?](#reffn_2 "Jump back to footnote [2] in the text.")
- 前言
- 1 Web概述
- 1.1 什么是Web
- 1.2 超文本和超鏈接
- 1.3 URL
- 1.4 DNS
- 1.5 HTTP
- 1.5.1 客戶端請求
- 1.5.2 服務器應答
- 1.5.3 進一步了解HTTP
- 1.6 HTTPS
- 2 Web瀏覽器
- 2.1 HTML
- 2.1.1 文檔類型聲明
- 2.1.2 標簽和屬性
- 2.1.3 文檔結構
- 2.1.4 DOM
- 2.1.5 進一步了解HTML
- 2.2 CSS
- 2.2.1 樣式與樣式表
- 2.2.2 樣式表語法
- 2.2.3 級聯樣式表
- 2.2.4 進一步了解CSS
- 2.3 JavaScript
- 2.3.1 script標簽
- 2.3.2 操縱DOM
- 2.3.3 jQuery
- 2.3.4 進一步了解JavaScript
- 2.4 Ajax
- 2.5 移動設備與響應式Web設計
- 3 Web服務器
- 3.1 方法與資源
- 3.2 狀態代碼
- 3.3 靜態內容與動態內容
- 3.4 編程語言與技術
- 3.4.1 CGI
- 3.4.2 PHP
- 3.4.3 Java
- 3.4.4 Python
- 3.4.5 Ruby
- 3.4.6 Node.js
- 3.5 RESTful Web API
- 3.6 服務器架構
- 3.7 Web緩存
- 3.8 服務器推送
- 4 數據庫
- 4.1 關系型數據庫
- 4.2 NoSQL數據庫
- 5 Web服務器的其他組件
- 5.1 Cron
- 5.2 消息隊列
- 5.3 郵件服務器
- 6 開發工具與技術
- 6.1 Git
- 6.1.1 Git基礎操作
- 6.1.2 Git基本原理
- 6.1.3 進一步了解Git
- 6.2 敏捷開發