第Ⅰ部分 概述和安装 3
第1章 安装Node 3
1.1在Windows上安装Node 4
1.2在MAC OS X上安装Node 6
1.3使用源代码安装Node 7
1.3.1选择Node的版本 7
1.3.2下载Node源代码 7
1.3.3编译Node 8
1.3.4安装Node 8
1.3.5运行Node 8
1.4安装和应用Node包管理器 9
1.5本章小结 14
第2章 Node简介 15
2.1事件驱动编程风格介绍 16
2.2 Node和JavaScript如何简化异步应用程序的编写 17
2.2.1什么是闭包 17
2.2.2闭包如何辅助异步编程 18
2.3本章小结 19
第Ⅱ部分 Node核心API基础 23
第3章 加载模块 23
3.1理解Node如何加载模块 24
3.2导出模块 24
3.3加载模块 25
3.3.1加载核心模块 25
3.3.2加载文件模块 26
3.3.3加载文件夹模块 26
3.3.4从node modules文件夹加载 26
3.3.5缓存模块 27
3.4本章小结 28
第4章 应用缓冲区处理、编码和解码二进制数据 29
4.1创建缓冲区 30
4.2在缓冲区中获取和设置数据 30
4.3切分缓冲区 31
4.4复制缓冲区 32
4.5缓冲区解码 32
4.6本章小结 33
第5章 使用事件发射器模式简化事件绑定 35
5.1理解标准回调模式 35
5.2理解事件发射器模式 36
5.3理解事件类型 37
5.4应用事件发生器API 38
5.4.1使用.addListener()或.on()绑定回调函数 38
5.4.2绑定多个事件监听器 39
5.4.3使用.removeListener()从事件发射器中删除一个事件监听器 40
5.4.4使用.once()使回调函数最多执行一次 40
5.4.5使用.removeAllisteners()从事件发射器删除所有事件监听器 41
5.5创建事件发射器 41
5.5.1从Node事件发射器继承 41
5.5.2发射事件 42
5.6本章小结 42
第6章 使用定时器制定函数执行计划 45
6.1使用setTimeout推迟函数执行 46
6.2使用clearTimeout取消函数执行 46
6.3制定和取消函数的重复执行计划 47
6.4使用process.nextTick将函数执行推迟到下一轮事件循环 47
6.5阻塞事件循环 48
6.6退出事件循环 49
6.7使用setTimeout代替setInterval强制函数串行执行 49
6.8本章小结 50
第Ⅲ部分 文件、进程、流和网络 53
第7章 查询和读写文件 53
7.1处理文件路径 54
7.1.1规范化路径 54
7.1.2连接路径 54
7.1.3解析路径 55
7.1.4查找两个绝对路径之间的相对路径 55
7.1.5提取路径的组成部分 55
7.1.6确定路径是否存在 56
7.2 fs模块简介 57
7.3打开文件 58
7.4读取文件 58
7.4.1写入文件 59
7.4.2关闭文件 60
7.5本章小结 62
第8章 创建和控制外部进程 63
8.1执行外部命令 63
8.2生成子进程 68
8.2.1创建子进程 68
8.2.2监听子进程的输出数据 69
8.2.3向子进程发送数据 69
8.2.4当子进程退出时获得通知 71
8.3向进程发送信号并终止进程 72
8.4本章小结 73
第9章 读写数据流 75
9.1使用可读流 76
9.1.1等待数据 76
9.1.2暂停与恢复流 76
9.1.3了解流何时终止 77
9.2使用可写流 77
9.2.1将数据写入流 77
9.2.2等待流被清空 78
9.3考虑几个流的例子 78
9.3.1创建文件系统流 78
9.3.2理解网络流 80
9.4避免慢客户端问题以及 80
挽救服务器 80
9.4.1理解慢客户端问题 80
9.4.2避免慢客户端问题 81
9.4.3应用stream pipe()避免慢客户端问题与使用pipe()集成可读流和可写流 81
9.5本章小结 82
第10章 构建TCP服务器 83
10.1创建TCP服务器 83
10.1.1应用套接字对象 85
10.1.2理解空闲套接字 86
10.1.3设置保持运行 87
10.1.4应用延时或非延时 87
10.1.5监听连接 88
10.1.6关闭服务器 88
10.1.7处理错误 88
10.2构建一个简单的TCP聊天服务器 89
10.2.1接受连接 89
10.2.2从连接中读取数据 89
10.2.3聚合所有客户端 90
10.2.4广播数据 91
10.2.5删除被关闭的连接 91
10.2.6使用TCP聊天服务器 92
10.3本章小结 93
第11章 构建HTTP服务器 95
11.1理解http.ServerRequest对象 96
11.2理解http.ServerResponse对象 98
11.2.1写入响应头 98
11.2.2修改或设置响应头 98
11.2.3删除响应头 99
11.2.4写入一块响应主体 99
11.3以流的形式传送HTTP分块响应 99
11.3.1传送文件 99
11.3.2传送其他进程的输出 100
11.4关闭服务器 100
11.5示例1:构建提交静态文件的服务器 101
11.6示例2:使用HTTP分块响应和定时器 102
11.7本章小结 102
第12章 构建TCP客户端 103
12.1连接服务器 104
12.2发送和接收数据 104
12.3终止连接 105
12.4处理错误 106
12.5创建命令行TCP客户端的示例 106
12.5.1连接服务器 107
12.5.2向服务器发送命令行 107
12.5.3打印服务器消息 107
12.5.4在连接终止时重新连接 108
12.5.5关闭连接 110
12.5.6前述内容综合 111
12.6本章小结 112
第13章 创建HTTP请求 113
13.1创建GET请求 113
13.2使用其他HTTP动词 114
13.2.1查看响应对象 115
13.2.2获取响应主体 116
13.2.3以流的方式传送响应主体 116
13.3使用HTTP.Agent维护套接字池 116
13.4应用第三方请求模块简化HTTP请求 118
13.4.1安装和应用request模块 118
13.4.2创建测试服务器 119
13.4.3跟随重定向 121
13.4.4设置请求选项 122
13.4.5对请求体进行编码 125
13.4.6 流式传送 126
13.4.7使用Cookie Jar 127
13.5本章小结 127
第14章 使用用户数据报 129
14.1理解用户数据报 129
14.2理解用户数据报的使用 130
14.3构建数据报服务器 130
14.3.1监听消息 130
14.3.2测试服务器 131
14.3.3查看附加的消息信息 132
14.4创建简单的数据报回送服务器 132
14.4.1等待消息 132
14.4.2向发送端发回消息 132
14.4.3前述内容综合 133
14.5构建数据报客户端 133
14.5.1创建客户端 134
14.5.2发送消息 134
14.5.3关闭套接字 134
14.6创建一个简单的数据报命令行客户端 134
14.6.1读取命令行 135
14.6.2向服务器发送数据 135
14.6.3从服务器接收数据 135
14.6.4前述内容综合 136
14.7理解和使用数据报多播 136
14.7.1接收多播消息 137
14.7.2发送多播消息 137
14.7.3理解数据报最大容量 138
14.8本章小结 138
第15章 用TLS/SSL保证服务器的安全性 139
15.1理解私钥和公钥 139
15.1.1产生私钥 140
15.1.2产生公钥 140
15.2构建TLS服务器 140
15.2.1初始化服务器 141
15.2.2监听连接 141
15.2.3从客户端读取数据 142
15.2.4向客户端发送数据 142
15.2.5终止连接 142
15.3构建TLS客户端 142
15.3.1初始化客户端 143
15.3.2连接服务器 143
15.3.3验证服务器证书 143
15.3.4向服务器发送数据 144
15.3.5从服务器读取数据 144
15.3.6终止连接 144
15.4创建几个示例 144
15.4.1创建TLS聊天服务器 145
15.4.2创建TLS命令行聊天客户端 146
15.4.3验证客户端证书 147
15.5本章小结 148
第16章 用HTTPS保证HTTP服务器的安全性 149
16.1构建安全的HTTP服务器 149
16.1.1设置服务器选项 150
16.1.2监听连接 150
16.1.3验证HTTPS客户端证书 151
16.2创建HTTPS客户端 152
16.2.1初始化客户端 152
16.2.2创建请求 152
16.2.3验证HTTPS服务器证书 153
16.3本章小结 154
第Ⅳ部分 构建与调试模块及应用程序 157
第17章 测试模块及应用程序 157
17.1应用测试运行工具 157
17.1.1编写测试 158
17.1.2运行测试 159
17.2使用断言测试模块 159
17.2.1使用断言模块 159
17.2.2使用Node-Tap中的内置断言函数 161
17.3测试异步模块 163
17.4本章小结 166
第18章 调试模块及应用程序 167
18.1使用console.log 167
18.2使用Node内置调试器 169
18.3使用Node检查器 173
18.4本章小结 175
第19章 控制回调流程 177
19.1理解飞去来器效应 177
19.2通过声明函数避免飞去来器效应 179
19.3使用ASYNC流程控制库 183
19.3.1串行执行 184
19.3.2并行执行 185
19.3.3连续传递 186
19.3.4排队 187
19.3.5迭代 189
19.3.6映射 190
19.3.7规约 191
19.3.8过滤 192
19.3.9检测 193
19.4本章小结 194
第Ⅴ部分 构建Web应用程序 197
第20章 构建和使用HTTP中间件 197
20.1理解Connect HTTP中间件框架 198
20.2构建自定义HTTP中间件 198
20.2.1创建异步中间件 199
20.2.2在中间件内部注册回调函数 201
20.2.3在中间件内处理错误 202
20.3使用捆绑在Connect中的HTTP中间件 206
20.3.1记录请求 206
20.3.2处理错误 208
20.3.3提交静态文件 209
20.3.4解析查询字符串 210
20.3.5解析请求主体 211
20.3.6解析Cookies 212
20.3.7使用会话 213
20.3.8其他可用的中间件 216
20.4本章小结 216
第21章 用Express.js创建Web应用程序 217
21.1初始化Express.js应用程序 218
21.2在应用程序中设置中间件 220
21.3路由请求 222
21.3.1处理路由 222
21.3.2使用会话 229
21.3.3使用路由中间件 234
21.4本章小结 238
第22章 使用Socket.IO创建通用的实时Web应用程序 241
22.1理解WebSockets如何工作 242
22.2使用Socket.IO创建WebSocket应用程序 243
22.2.1在服务器上安装和运行Socket.IO 243
22.2.2使用Socket.IO创建实时网络聊天应用程序 245
22.2.3扩展聊天应用程序 250
22.2.4检测连接断开 253
22.2.5将用户分隔到聊天室中 255
22.2.6使用名称空间 259
22.2.7使用Redis分布运行服务器端应用程序 260
22.3本章小结 263
第Ⅵ部分 连接数据库 267
第23章 使用node-mysql连接MySQL数据库 267
23.1应用库与MySQL数据库进行连接和通信 267
23.2向数据库添加数据时请记住安全性 269
23.3高效读取数据 272
23.4本章小结 276
第24章 使用Nano连接CouchDB数据库 277
24.1安装Nano 278
24.2连接和创建数据库 281
24.3存储文档 285
24.4创建和使用CouchDB视图 286
24.5将文件附加到CouchDB文档上 299
24.6本章小结 312
第25章 使用 Mongoose连接MongoDB数据库 313
25.1安装Mongoose 315
25.2理解Mongoose如何使用模型封装对数据库的访问 315
25.3连接MongoDB数据库 316
25.4定义模式 316
25.5定义模型 316
25.5.1使用验证器 326
25.5.2使用修改器 332
25.5.3使用取值器 333
25.5.4使用虚拟属性 334
25.5.5使用默认值 340
25.5.6定义索引 341
25.5.7使用DB Refs引用其他文档 343
25.5.8定义实例方法 349
25.5.9定义静态方法 350
25.6本章小结 351