# 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 敏捷开发