第1章 欢迎来到Node.js平台 1
Node.js的哲学思想 2
小核心 2
小模块 2
小接触面 3
简单和实用 3
认识Node.js 6和ES2015 4
let和const关键字 5
箭头函数 6
类语法 8
增强的对象字面量 10
Map和Set集合 11
WeakMap和WeakSet集合 13
模板字面量 14
其他ES2015特性 14
Reactor模式 15
I/O是缓慢的 15
阻塞I/O 15
非阻塞I/O 16
事件多路分解器 17
Reactor模式简介 19
Node.js-libuv的非阻塞I/O引擎 20
Node.js的秘诀 21
总结 21
第2章 Node.js基础设计模式 23
回调模式 24
CPS(Continuation Passing Style) 24
同步或异步 26
Node.js回调约定 31
模块系统及其模式 34
揭示模块模式 34
Node.js模块解释 35
模块定义模式 42
观察者模式 49
EventEmitter类 49
创建和使用EventEmitter 50
传播错误 51
使任何对象可观察 51
同步和异步事件 53
EventEmitter与回调 54
组合回调和EventEmitter 55
总结 55
第3章 异步控制流模式之回调函数 56
异步编程的困难 56
创建一个简单的网络蜘蛛 57
回调地狱 59
使用纯JavaScript 60
回调规则 60
应用回调规则 61
顺序执行 63
并行执行 68
有限制的并行执行 73
async库 77
顺序执行 78
并行执行 81
有限制的并行执行 81
总结 83
第4章 异步控制流模式之ES2015+ 84
promise 84
什么是promise 85
Promises/A+实现 87
Node.js风格函数的promise化 88
顺序执行 90
并行执行 93
有限制的并行执行 93
在公共API中暴露callback和promise 95
generator 97
generator基础 97
generator的异步控制流 100
顺序执行 104
并行执行 106
有限制的并行执行 108
使用Babel的async await 111
安装和运行Babel 112
比较 113
总结 114
第5章 流编程 115
流的重要性 115
缓冲和流 116
空间效率 117
时间效率 118
组合性 121
开始学习流 122
流的分类 122
可读流 123
可写流 127
双向流(Duplex stream)132(Duplex stream)变换流 132
使用管道拼接流 135
使用流处理异步流程 137
顺序执行 138
无序并行执行 139
无序有限制的并行执行 143
管道模式 146
组合流 146
复制流 149
合并流 150
复用和分解 152
总结 159
第6章 设计模式 160
工厂模式 161
创建对象的通用接口 161
一种封装的机制 162
构建一个简单的代码分析器 164
可组合的工厂函数 166
扩展 169
揭示构造函数 170
只读事件触发器 171
扩展 172
代理模式 173
实现代理模式的方法 174
不同方法的比较 176
创建日志记录的写入流 176
生态系统中的代理模式——函数钩子与面向行为编程(AOP) 178
ES2015中的Proxy对象 178
扩展 180
装饰者模式(Decorator) 180
实现装饰者模式的方法 181
装饰一个LevelUP数据库 182
扩展 185
适配器模式(Adapter) 185
通过文件系统API来使用LevelUP数据库 186
扩展 189
策略模式(Strategy) 189
支持多种格式的配置对象 190
扩展 193
状态模式 193
实现一个基本的自动防故障套接字 194
模板模式(Template) 199
配置管理器模板 199
扩展 201
中间件(Middleware) 202
Express中的中间件 202
设计模式中的中间件 203
为?MQ创建中间件框架 204
在Koa中使用生成器的中间件 210
命令模式(Command) 213
灵活的设计模式 214
总结 218
第7章 连接模块 220
模块和依赖 221
Node.js中最常见的依赖 221
内聚和耦合 222
有状态的模块 222
连接模块模式 224
硬编码依赖 224
依赖注入 229
服务定位器 234
依赖注入容器 239
连接插件 243
插件作为包 243
扩展点 245
插件控制与应用程序控制的扩展 245
实现注销插件 248
总结 256
第8章 通用JavaScript的Web应用程序 257
与浏览器端共享代码 258
共享模块 258
Webpack简介 262
Webpack的魔力 263
Webpack的优点 264
使用ES2015和Webpack 265
跨平台开发基础 267
运行时代码分支 268
构建时代码分支 269
模块交换 271
用于跨平台开发的设计模式 273
React介绍 274
第一个React组件 275
JSX是什么 277
配置Webpack以实现JSX转换 279
在浏览器中渲染 280
React路由库 281
创建通用JavaScript应用程序 286
创建可用的组件 287
服务端渲染 289
通用渲染和路由 293
通用数据检索 294
总结 304
第9章 高级异步编程技巧 305
需要异步初始化的模块 305
规范解决方案 306
预初始化队列 307
题外话 311
异步批处理和缓存 312
实现没有缓存或批处理的服务器 312
异步请求批处理 314
异步请求缓存 316
使用promise进行批处理和缓存 319
运行CPU绑定的任务 321
解决子集和问题 321
交叉使用setImmediate 324
使用多进程 327
总结 334
第10章 扩展与架构模式 335
应用程序扩展介绍 336
扩展Node.js应用程序 336
可扩展性的三个维度 336
克隆和负载均衡 338
集群模块 339
处理有状态通信 347
使用反向代理进行扩展 349
使用服务注册表 353
对等负载均衡 359
分解复杂的应用程序 361
单体式架构 361
微服务架构 363
微服务架构中的集成模式 366
总结 371
第11章 消息传递与集成模式 373
消息、系统的基础 374
单向和请求/应答模式 374
消息类型 375
异步消息和队列 376
对等或基于代理的消息 377
发布/订阅模式 378
构建简约的实时聊天应用程序 379
使用Redis作为消息代理 382
使用?MQ对等发布/订阅 384
持久订阅者 388
管道和任务分配模式 395
?MQ扇出/扇入模式 396
使用AMQP实现管道和竞争消费者模式 400
请求/应答模式 405
关联标识符 405
返回地址 409
总结 414