- 内容简介
- 前言
- 第1章 Node.js概述
- 1.1 当前互联网应用的特征
- 1.1.1 快!快!快!
- 1.1.2 渐进式开发
- 1.1.3 拥抱变化
- 1.1.4 敏捷之道
- 1.1.5 开源技术
- 1.1.6 微服务
- 1.1.7 高并发
- 1.1.8 高可用
- 1.2 Node.js简介
- 1.2.1 Node.js简史
- 1.2.2 为什么叫Node.js
- 1.3 Node.js特点
- 1.3.1 异步I/O
- 1.3.2 事件驱动
- 1.3.3 单线程
- 1.3.4 支持微服务
- 1.3.5 可用性和扩展性
- 1.3.6 跨平台
- 1.4 安装Node.js及IDE
- 1.4.1 安装Node.js和npm
- 1.4.2 Node.js与npm的关系
- 1.4.3 安装npm镜像
- 1.4.4 选择合适的IDE
- 1.5 实战:第一个Node.js应用
- 1.5.1 创建Node.js应用
- 1.5.2 运行Node.js应用
- 1.5.3 总结
- 1.1 当前互联网应用的特征
- 第2章 模块化
- 2.1 理解模块化机制
- 2.1.1 理解CommonJS规范
- 2.1.2 理解ES6模块
- 2.1.3 CommonJS和ES6模块的异同点
- 2.1.4 Node.js的模块实现
- 2.2 使用npm管理模块
- 2.2.1 使用npm命令安装模块
- 2.2.2 全局安装与本地安装
- 2.2.3 查看安装信息
- 2.2.4 卸载模块
- 2.2.5 更新模块
- 2.2.6 搜索模块
- 2.2.7 创建模块
- 2.3 核心模块
- 2.1 理解模块化机制
- 第3章 测试
- 3.1 使用断言
- 3.1.1 严格模式和遗留模式
- 3.1.2 实战:断言的使用
- 3.1.3 了解AssertionError
- 3.1.4 实战:deepStrictEqual示例
- 3.2 第三方测试工具
- 3.2.1 Nodeunit
- 3.2.2 Mocha
- 3.2.3 Vows
- 3.1 使用断言
- 第4章 缓冲区
- 4.1 了解Buffer
- 4.1.1 了解TypedArray
- 4.1.2 Buffer类
- 4.2 创建缓冲区
- 4.2.1 初始化缓冲区的API
- 4.2.2 理解数据的安全性
- 4.2.3 启用零填充
- 4.2.4 指定字符编码
- 4.3 切分缓冲区
- 4.4 连接缓冲区
- 4.5 比较缓冲区
- 4.6 缓冲区编解码
- 4.6.1 解码器和编码器
- 4.6.2 缓冲区解码
- 4.6.3 缓冲区编码
- 4.1 了解Buffer
- 第5章 事件处理
- 5.1 理解事件和回调
- 5.2 事件发射器
- 5.2.1 将参数和this传给监听器
- 5.2.2 异步与同步
- 5.2.3 仅处理事件一次
- 5.3 事件类型
- 5.4 事件的操作
- 5.4.1 实战:设置最大监听器
- 5.4.2 实战:获取已注册的事件的名称
- 5.4.3 实战:获取监听器数组的副本
- 5.4.4 实战:将事件监听器添加到监听器数组的开头
- 5.4.5 实战:移除监听器
- 第6章 定时处理
- 6.1 定时处理常用类
- 6.1.1 Immediate
- 6.1.2 Timeout
- 6.2 定时调度
- 6.2.1 setImmediate
- 6.2.2 setInterval
- 6.2.3 setTimeout
- 6.2.4 setInterval和setTimeout的异同
- 6.3 取消定时
- 6.1 定时处理常用类
- 第7章 文件处理
- 7.1 了解fs模块
- 7.1.1 同步与异步操作文件
- 7.1.2 文件描述符
- 7.2 处理文件路径
- 7.3 打开文件
- 7.3.1 文件系统标志
- 7.3.2 实战:打开文件的例子
- 7.4 实战:读取文件
- 7.4.1 fs.read
- 7.4.2 fs.readdir
- 7.4.3 fs.readFile
- 7.5 实战:写入文件
- 7.5.1 将Buffer写入文件
- 7.5.2 将字符串写入文件
- 7.5.3 将数据写入文件
- 7.1 了解fs模块
- 第8章 进程
- 8.1 执行外部命令
- 8.1.1 spawn
- 8.1.2 exec
- 8.1.3 execFile
- 8.2 子进程ChildProcess
- 8.2.1 生成子进程
- 8.2.2 进程间通信
- 8.3 终止进程
- 8.1 执行外部命令
- 第9章 流
- 9.1 流的概述
- 9.1.1 流的类型
- 9.1.2 对象模式
- 9.1.3 流中的缓冲区
- 9.2 可读流
- 9.2.1 stream.Readable类事件
- 9.2.2 stream.Readable类方法
- 9.2.3 异步迭代器
- 9.2.4 两种读取模式
- 9.3 可写流
- 9.3.1 stream.Writable类事件
- 9.3.2 stream.Writable类方法
- 9.4 双工流与转换流
- 9.4.1 实现双工流
- 9.4.2 实战:双工流的例子
- 9.4.3 对象模式的双工流
- 9.4.4 实现转换流
- 9.1 流的概述
- 第10章 TCP
- 10.1 创建TCP服务器
- 10.1.1 了解TCP
- 10.1.2 了解Socket
- 10.1.3 net模块
- 10.1.4 实战:创建TCP服务器
- 10.2 监听连接
- 10.2.1
server.listen(handle[, backlog][, callback])
- 10.2.2
server.listen(options[, callback])
- 10.2.1
- 10.3 发送和接收数据
- 10.3.1 创建Socket对象
- 10.3.2 创建Socket对象发送和接收数据
- 10.3.3 实战:TCP服务器的例子
- 10.4 关闭TCP服务器
- 10.4.1 socket.end()
- 10.4.2 server.close()
- 10.1 创建TCP服务器
- 第11章 UDP
- 11.1 创建UDP服务器
- 11.1.1 了解UDP
- 11.1.2 TCP与UDP区别
- 11.1.3 实战:创建UDP服务器
- 11.2 监听连接
- 11.3 发送和接收数据
- 11.3.1 message事件
- 11.3.2 socket.send()方法
- 11.4 关闭UDP服务器
- 11.5 实战:UDP服务器的例子
- 11.5.1 UDP服务器
- 11.5.2 UDP客户端
- 11.5.3 运行应用
- 11.1 创建UDP服务器
- 第12章 HTTP
- 12.1 创建HTTP服务器
- 12.1.1 http.Server创建服务器
- 12.1.2 http.Server事件
- 12.2 处理HTTP常用操作
- 12.3 请求对象和响应对象
- 12.3.1 http.ClientRequest类
- 12.3.2 http.ServerResponse类
- 12.4 REST概述
- 12.4.1 REST定义
- 12.4.2 REST设计原则
- 12.5 成熟度模型
- 12.5.1 第0级:使用HTTP作为传输方式
- 12.5.2 第1级:引入了资源的概念
- 12.5.3 第2级:根据语义使用HTTP动词
- 12.5.4 第3级:使用HATEOAS
- 12.6 实战:构建REST服务的例子
- 12.6.1 新增用户
- 12.6.2 修改用户
- 12.6.3 删除用户
- 12.6.4 响应请求
- 12.6.5 运行应用
- 12.1 创建HTTP服务器
- 第13章 WebSocket
- 13.1 创建WebSocket服务器
- 13.1.1 Web推送技术的总结
- 13.1.2 使用ws创建WebSokcet服务器
- 13.2 监听连接
- 13.3 发送和接收数据
- 13.3.1 发送数据
- 13.3.2 发送ping和pong
- 13.3.3 接收数据
- 13.4 准备的状态
- 13.5 关闭WebSocket服务器
- 13.6 实战:WebSocket聊天服务器的例子
- 13.6.1 聊天服务器的需求
- 13.6.2 服务器的实现
- 13.6.3 客户端的实现
- 13.6.4 运行应用
- 13.1 创建WebSocket服务器
- 第14章 TLS/SSL
- 14.1 了解TLS/SSL
- 14.1.1 加密算法
- 14.1.2 安全通道
- 14.1.3 TLS/SSL握手过程
- 14.1.4 HTTPS
- 14.2 Node.js中的TLS/SSL
- 14.3 产生私钥
- 14.4 实战:构建TLS服务器和客户端
- 14.4.1 构建TLS服务器
- 14.4.2 构建TLS客户端
- 14.4.3 运行应用
- 14.1 了解TLS/SSL
- 第15章 常用Web中间件
- 15.1 Express
- 15.1.1 安装Express
- 15.1.2 实战:编写“Hello World”应用
- 15.1.3 运行“Hello World”应用
- 15.1.4 实战:Express构建REST API
- 15.1.5 测试Express的REST API
- 15.2 Socket.IO
- 15.2.1 Socket.IO主要特点
- 15.2.2 安装Socket.IO
- 15.2.3 实战:编写Socket.IO服务器
- 15.2.4 实战:编写Socket.IO客户端
- 15.2.5 运行应用
- 15.1 Express
- 第16章 UI编程
- 16.1 常见UI框架
- 16.1.1 Angular与jQuery的不同
- 16.1.2 Angular与React、Vue.js优势对比
- 16.1.3 Angular、React、Vue.js三者怎么选
- 16.2 Angular的下载安装
- 16.3 Angular CLI的常用操作
- 16.3.1 获取帮助(
ng -h
) - 16.3.2 创建应用
- 16.3.3 创建组件
- 16.3.4 创建服务
- 16.3.5 启动应用
- 16.3.6 添加依赖
- 16.3.7 升级依赖
- 16.3.8 自动化测试
- 16.3.9 下载依赖
- 16.3.10 编译
- 16.3.1 获取帮助(
- 16.4 实战:Angular应用的例子
- 16.4.1 使用Angular CLI初始化应用
- 16.4.2 运行Angular应用
- 16.4.3 了解src文件夹
- 16.4.4 根目录
- 16.1 常见UI框架
- 第17章 响应式编程
- 17.1 了解Observable机制
- 17.1.1 了解Observable基本概念
- 17.1.2 定义观察者
- 17.1.3 执行订阅
- 17.1.4 创建Observable对象
- 17.1.5 实现多播
- 17.1.6 处理错误
- 17.2 了解RxJS技术
- 17.2.1 创建Observable对象的函数
- 17.2.2 了解操作符
- 17.2.3 处理错误
- 17.3 了解Angular中的Observable
- 17.3.1 EventEmitter
- 17.3.2 HTTP
- 17.3.3 AsyncPipe
- 17.3.4 Router
- 17.3.5 响应式表单
- 17.1 了解Observable机制
- 第18章 操作MySQL
- 18.1 下载安装MySQL
- 18.1.1 下载安装包
- 18.1.2 解压安装包
- 18.1.3 创建my.ini
- 18.1.4 初始化安装
- 18.1.5 启动、关闭MySQL server
- 18.1.6 使用MySQL客户端
- 18.2 MySQL的基本操作
- 18.2.1 显示已有的数据库
- 18.2.2 创建新的数据库
- 18.2.3 使用数据库
- 18.2.4 建表
- 18.2.5 查看表
- 18.2.6 插入数据
- 18.3 实战:使用Node.js操作MySQL
- 18.3.1 安装mysql模块
- 18.3.2 实现简单的查询
- 18.3.3 运行应用
- 18.4 深入理解mysql模块
- 18.4.1 建立连接
- 18.4.2 连接选项
- 18.4.3 关闭连接
- 18.4.4 执行CURD
- 18.1 下载安装MySQL
- 第19章 操作MongoDB
- 19.1 下载安装MongoDB
- 19.1.1 MongoDB简介
- 19.1.2 下载MongoDB
- 19.1.3 启动MongoDB服务
- 19.1.4 连接到MongoDB服务器
- 19.2 MongoDB的基本操作
- 19.2.1 显示已有的数据库
- 19.2.2 创建、使用数据库
- 19.2.3 插入文档
- 19.2.4 查询文档
- 19.2.5 修改文档
- 19.2.6 删除文档
- 19.3 实战:使用Node.js操作MongoDB
- 19.3.1 安装mongodb模块
- 19.3.2 实现访问MongoDB
- 19.3.3 运行应用
- 19.4 深入理解mongodb模块
- 19.4.1 建立连接
- 19.4.2 插入文档
- 19.4.3 查找文档
- 19.4.4 修改文档
- 19.4.5 删除文档
- 19.1 下载安装MongoDB
- 第20章 操作Redis
- 20.1 下载安装Redis
- 20.1.1 Redis简介
- 20.1.2 在Linux平台上安装Redis
- 20.1.3 在Windows平台上安装Redis
- 20.2 Redis的数据类型及基本操作
- 20.2.1 Redis key
- 20.2.2 Redis String
- 20.2.3 修改和查询key空间
- 20.2.4 Redis超时
- 20.2.5 Redis List
- 20.2.6 使用Redis List的第一步
- 20.2.7 List常见的用例
- 20.2.8 限制列表
- 20.3 实战:使用Node.js操作Redis
- 20.3.1 安装redis模块
- 20.3.2 实现访问Redis
- 20.3.3 运行应用
- 20.1 下载安装Redis
- 第21章 实战:“用户管理”客户端的实现
- 21.1 “用户管理”应用概述
- 21.1.1 初始化数据库
- 21.1.2 创建用户表
- 21.1.3 初始化Angualr的应用外壳
- 21.2 修改AppComponent组件
- 21.2.1 修改app.component.ts
- 21.2.2 修改app.component.html
- 21.2.3 添加应用样式
- 21.3 实现用户编辑器
- 21.3.1 创建用户列表组件
- 21.3.2 添加user属性
- 21.3.3 显示用户
- 21.3.4 显示UsersComponent视图
- 21.3.5 创建User类
- 21.3.6 编辑用户信息
- 21.3.7 添加FormsModule
- 21.3.8 声明组件
- 21.4 展示用户列表
- 21.4.1 模拟用户数据
- 21.4.2 展示用户列表
- 21.4.3 使用
*ngFor
列出用户 - 21.4.4 添加样式
- 21.4.5 添加事件
- 21.4.6 设置选中的样式
- 21.5 多组件化开发
- 21.5.1 创建UserDetailComponent组件
- 21.5.2 编辑user-detail.component.html
- 21.5.3 编辑user-detail.component.ts
- 21.5.4 编辑users.component.html
- 21.5.5 运行
- 21.6 使用服务
- 21.6.1 服务的用处
- 21.6.2 创建UserService服务
- 21.6.3 提供UserService服务
- 21.6.4 修改UsersComponent组件
- 21.6.5 使用Observable数据
- 21.6.6 显示消息
- 21.7 使用路由
- 21.7.1 路由的用处
- 21.7.2 创建AppRoutingModule
- 21.7.3 添加路由出口
- 21.7.4 添加路由链接
- 21.7.5 添加仪表盘视图
- 21.7.6 导航用户详情
- 21.7.7 支持路由的UserDetailComponent组件
- 21.8 使用HTTP
- 21.8.1 启用HTTP服务
- 21.8.2 模拟数据服务器
- 21.8.3 通过HTTP获取用户数据
- 21.8.4 修改、添加、删除、搜索用户
- 21.1 “用户管理”应用概述
- 第22章 实战:“用户管理”服务端的实现
- 22.1 服务端概述
- 22.1.1 Express提供服务
- 22.1.2 MySQL实现数据的持久化
- 22.1.3 初始化“用户管理”服务端应用
- 22.2 创建REST API
- 22.2.1 什么是连接池
- 22.2.2 获取所有用户列表API
- 22.2.3 获取指定ID的用户API
- 22.2.4 创建用户信息API
- 22.2.5 更新用户信息API
- 22.2.6 删除指定ID的用户API
- 22.2.7 获取指定姓名的用户API
- 22.3 客户端访问服务端
- 22.3.1 理解跨域
- 22.3.2 设置反向代理
- 22.3.3 初始化新的客户端应用
- 22.3.4 取消内存模式
- 22.3.5 客户端与服务端对象映射
- 22.3.6 运行
- 22.1 服务端概述
- 附录:本书所涉及的技术及相关版本
- 参考文献