第1章 初识Express 1
1.1 JavaScript革命 1
1.2 初识Express 2
1.3 Express简史 3
1.4 升级到Express 4.0 4
1.5 Node:一种新型Web服务器 4
1.6 Node的生态系统 5
1.7 授权 6
第2章 从Node开始 8
2.1 获取Node 8
2.2 使用终端 9
2.3 编辑器 10
2.4 npm 11
2.5 用Node实现的简单Web服务器 12
2.5.1 Hello World 12
2.5.2 事件驱动编程 13
2.5.3 路由 13
2.5.4 静态资源服务 14
2.6 走向Express 16
第3章 省时省力的Express 17
3.1 脚手架 17
3.2 草地鹨旅行社网站 18
3.3 初始步骤 18
3.3.1 视图和布局 21
3.3.2 视图和静态文件 24
3.3.3 视图中的动态内容 24
3.4 小结 25
第4章 工欲善其事,必先利其器 26
4.1 最佳实践 26
4.2 版本控制 27
4.3 针对本书如何使用Git 27
4.3.1 如果你要自己动手 28
4.3.2 如果你要使用官方存储库 29
4.4 npm包 29
4.5 项目元数据 31
4.6 Node模块 31
第5章 质量保证 33
5.1 QA:值得吗 34
5.2 逻辑与展示 35
5.3 测试的类型 35
5.4 QA技术概览 35
5.5 运行你的服务器 36
5.6 页面测试 36
5.7 跨页测试 40
5.8 逻辑测试 43
5.9 去毛 43
5.10 链接检查 44
5.11 用Grunt实现自动化 44
5.12 持续集成 46
第6章 请求和响应对象 48
6.1 URL的组成部分 48
6.2 HTTP请求方法 49
6.3 请求报头 50
6.4 响应报头 50
6.5 互联网媒体类型 51
6.6 请求体 51
6.7 参数 51
6.8 请求对象 51
6.9 响应对象 53
6.10 获取更多信息 55
6.11 小结 56
6.11.1 内容渲染 56
6.11.2 处理表单 57
6.11.3 提供一个API 58
第7章 Handlebars模板引擎 60
7.1 唯一一条绝对规则 61
7.2 选择模板引擎 61
7.3 Jade:不走寻常路 62
7.4 Handlebars基础 63
7.4.1 注释 64
7.4.2 块级表达式 64
7.4.3 服务器端模板 66
7.4.4 视图和布局 67
7.4.5 在Express中使用(或不使用)布局 69
7.4.6 局部文件 69
7.4.7 段落 71
7.4.8 完善你的模板 72
7.4.9 客户端Handlebars 73
7.5 小结 75
第8章 表单处理 76
8.1 向服务器发送客户端数据 76
8.2 HTML表单 76
8.3 编码 77
8.4 处理表单的不同方式 78
8.5 Express表单处理 79
8.6 处理AJAX表单 81
8.7 文件上传 83
8.8 jQuery文件上传 85
第9章 Cookie与会话 88
9.1 凭证的外化 89
9.2 Express中的Cookie 90
9.3 检查Cookie 91
9.4 会话 92
9.4.1 内存存储 92
9.4.2 使用会话 93
9.5 用会话实现即显消息 93
9.6 会话的用途 95
第10章 中间件 96
10.1 常用中间件 100
10.2 第三方中间件 102
第11章 发送邮件 103
11.1 SMTP、MSA和MTA 103
11.2 接收邮件 104
11.3 邮件头 104
11.4 邮件格式 104
11.5 HTML邮件 105
11.6 Nodemailer 105
11.6.1 发送邮件 106
11.6.2 将邮件发送给多个接收者 107
11.7 发送批量邮件的更佳选择 108
11.8 发送HTML邮件 108
11.8.1 HTML邮件中的图片 108
11.8.2 用视图发送HTML邮件 109
11.8.3 封装邮件功能 111
11.9 将邮件作为网站监测工具 112
第12章 与生产相关的问题 113
12.1 执行环境 113
12.2 环境特定配置 114
12.3 扩展你的网站 115
12.3.1 用应用集群扩展 116
12.3.2 处理未捕获的异常 118
12.3.3 用多台服务器扩展 121
12.4 网站监控 122
12.4.1 第三方正常运行监控 122
12.4.2 应用程序故障 122
12.5 压力测试 123
第13章 持久化 124
13.1 文件系统持久化 124
13.2 云持久化 126
13.3 数据库持久化 126
13.3.1 关于性能 127
13.3.2 设置MongoDB 127
13.3.3 Mongoose 128
13.3.4 使用Mongoose连接数据库 128
13.3.5 创建模式和模型 129
13.3.6 添加初始数据 130
13.3.7 获取数据 131
13.3.8 添加数据 133
13.3.9 用MongoDB存储会话数据 134
第14章 路由 137
14.1 路由和SEO 139
14.2 子域名 139
14.3 路由处理器是中间件 140
14.4 路由路径和正则表达式 141
14.5 路由参数 142
14.6 组织路由 143
14.7 在模块中声明路由 143
14.8 按逻辑对处理器分组 144
14.9 自动化渲染视图 145
14.10 其他的路由组织方式 146
第15章 REST API和JSON 147
15.1 JSON和XML 148
15.2 我们的API 148
15.3 API错误报告 149
15.4 跨域资源共享 150
15.5 我们的数据存储 150
15.6 我们的测试 151
15.7 用Express提供API 152
15.8 使用REST插件 153
15.9 使用子域名 155
第16章 静态内容 157
16.1 性能方面的考虑 158
16.2 面向未来的网站 158
16.2.1 静态映射 159
16.2.2 视图中的静态资源 160
16.2.3 CSS中的静态资源 161
16.3 服务器端JavaScript中的静态资源 162
16.4 客户端JavaScript中的静态资源 163
16.5 提供静态资源 164
16.6 修改静态内容 165
16.7 打包和缩小 165
16.8 关于第三方库 170
16.9 QA 170
16.10 小结 171
第17章 在Express中实现MVC 173
17.1 模型 174
17.2 视图模型 175
17.3 控制器 177
17.4 小结 179
第18章 安全 180
18.1 HTTPS 180
18.1.1 生成自己的证书 181
18.1.2 使用免费的证书颁发机构 182
18.1.3 购买证书 182
18.1.4 对你的Express应用启用HTTPS 184
18.1.5 关于端口的说明 185
18.1.6 HTTPS和代理 185
18.2 跨站请求伪造 187
18.3 认证 187
18.3.1 认证与授权 188
18.3.2 密码的问题 188
18.3.3 第三方认证 188
18.3.4 把用户存在数据库中 189
18.3.5 认证与注册和用户体验 190
18.3.6 Passport 190
18.3.7 基于角色的授权 199
18.3.8 添加更多认证提供者 200
18.4 小结 201
第19章 集成第三方API 202
19.1 社交媒体 202
19.1.1 社交媒体插件和站点性能 202
19.1.2 搜索推文 203
19.1.3 渲染推文 206
19.2 地理编码 209
19.2.1 用谷歌的地理编码 209
19.2.2 对你的数据做地理编码 210
19.2.3 显示地图 213
19.2.4 提升客户端性能 215
19.3 天气数据 216
19.4 小结 217
第20章 调试 218
20.1 调试的首要原则 218
20.2 利用好REPL和控制台 219
20.3 利用Node内置的调试器 220
20.4 Node探查器 220
20.5 调试异步函数 223
20.6 调试Express 224
第21章 正式启用 226
21.1 域名注册和托管服务 226
21.1.1 域名系统 227
21.1.2 安全 227
21.1.3 顶级域名 228
21.1.4 子域名 229
21.1.5 域名服务器 229
21.1.6 托管 230
21.1.7 部署 233
21.2 小结 236
第22章 维护 237
22.1 维护的原则 237
22.1.1 有长远规划 237
22.1.2 使用源码控制系统 239
22.1.3 使用问题追踪系统 239
22.1.4 良好的卫生习惯 239
22.1.5 不要拖延 239
22.1.6 做常规的QA检查 240
22.1.7 监测分析 240
22.1.8 性能优化 240
22.1.9 潜在用户追踪优先 241
22.1.10 防止出现“不可见的”错误 242
22.2 代码重用及重构 243
22.2.1 私有npm库 243
22.2.2 中间件 244
22.3 小结 246
第23章 其他资源 247
23.1 在线文档 247
23.2 期刊 248
23.3 Stack Overflow 248
23.4 为Express做贡献 250
23.5 小结 252
关于封面 253
关于作者 254