第1章 MEAN简介 1
1.1 三层Web应用开发 1
1.2 JavaScript的演进 2
1.3 MEAN简介 3
1.4 安装MongoDB 4
1.4.1 在Windows上安装MongoDB 5
1.4.2 在Mac OS X和Linux上安装MongoDB 7
1.4.3 使用MongoDB命令行工具 8
1.5 安装Node js 9
1.5.1 在Windows上安装Node.js 10
1.5.2 在Mac OS X上安装Node.js 11
1.5.3 在Linux上安装Node.js 12
1.5.4 运行Node.js 12
1.6 NPM简介 13
1.7 总结 18
第2章 Node.js入门 19
2.1 Node.js简介 19
2.1.1 JavaScript事件驱动编程 20
2.1.2 Node js事件驱动编程 22
2.2 JavaScript闭包 23
2.3 Node模块 24
2.3.1 CommonJS模块 24
2.3.2 Node js核心模块 26
2.3.3 Node js第三方模块 26
2.3.4 Node js文件模块 26
2.3.5 Node js文件夹模块 27
2.4 Node js Web应用开发 27
2.5 总结 34
第3章 使用Express开发Web应用 35
3.1 Express简介 35
3.2 Express安装 36
3.3 创建第一个Express应用 36
3.4 应用、请求和响应对象 37
3.4.1 应用对象 37
3.4.2 请求对象 38
3.4.3 响应对象 38
3.5 外部的中间件 39
3.6 实现MVC模式 40
3.7 Express应用配置 48
3.8 渲染视图 51
3.8.1 配置视图系统 51
3.8.2 EJS视图渲染 53
3.9 静态文件服务 53
3.10 配置会话 55
3.11 总结 57
第4章 MongoDB入门 58
4.1 NoSQL简介 58
4.2 MongoDB简介 60
4.3 MongoDB的关键特性 61
4.3.1 BSON格式 61
4.3.2 MongoDB即席查询 61
4.3.3 MongoDB索引 62
4.3.4 MongoDB副本集 63
4.3.5 MongoDB分片 64
4.4 MongoDB命令行工具 65
4.5 MongoDB数据库 66
4.6 MongoDB集合 66
4.7 MongoDB增删改查操作 67
4.7.1 创建新文档 67
4.7.2 读取文档 68
4.7.3 更新已有文档 69
4.7.4 删除文档 70
4.8 总结 71
第5章 Mongoose入门 72
5.1 Mongoose简介 72
5.1.1 安装Mongoose 72
5.1.2 连接MongoDB 73
5.2 理解Mongoose的模式 74
5.2.1 创建User模式与模型 74
5.2.2 注册USer模型 75
5.2.3 使用save()创建新文档 75
5.2.4 使用find()查找多个文档 77
5.2.5 使用findone()读取单个文档 79
5.2.6 更新已有文档 80
5.2.7 删除已有文档 81
5.3 扩展Mongoose模式 82
5.3.1 定义默认值 82
5.3.2 使用模式修饰符 83
5.3.3 增加虚拟属性 85
5.3.4 使用索引优化查询 85
5.4 模型方法自定义 86
5.4.1 自定义静态方法 86
5.4.2 自定义实例方法 87
5.5 模型的校验 87
5.5.1 预定义的验证器 87
5.5.2 自定义的验证器 89
5.6 使用Mongoose中间件 89
5.6.1 预处理中间件 89
5.6.2 后置处理中间件 90
5.7 使用Mongoose DBRef 90
5.8 总结 91
第6章 使用Passport模块管理用户权限 92
6.1 Passport简介 92
6.1.1 安装 92
6.1.2 配置 93
6.2 理解Passport策略 95
6.2.1 使用Passport的本地策略 95
6.2.2 修改User模型 97
6.2.3 创建身份验证视图 99
6.2.4 修改用户控制器 101
6.2.5 添加用户路由 105
6.3 理解Passport的OAuth策略 107
6.4 总结 118
第7章 AngularJS入门 119
7.1 AngularJS简介 119
7.2 AngularJS的核心概念 119
7.2.1 核心模块 120
7.2.2 模块 120
7.2.3 双向数据绑定 121
7.2.4 依赖注入 122
7.2.5 AngularJS指令 123
7.2.6 AngularJS应用的引导 124
7.3 安装AngularJS 125
7.3.1 Bower包管理器 125
7.3.2 配置Bower 126
7.3.3 使用Bower安装AngularJS 126
7.3.4 配置AngularJS 127
7.4 AngularJS应用的结构 127
7.5 引导AngularJS应用 130
7.6 AngularJS的MVC实体 131
7.6.1 视图 132
7.6.2 控制器和scope 133
7.7 AngularJS路由 135
7.7.1 安装ngRoute模块 136
7.7.2 配置URL模式 137
7.7.3 AngularJS应用路由 137
7.8 AngularJS服务 139
7.8.1 预置服务 139
7.8.2 自定义服务 140
7.8.3 服务的使用 141
7.9 管理AngularJS的身份验证 141
7.9.1 将user对象填充到视图 141
7.9.2 添加身份验证服务 142
7.9.3 使用身份验证服务 144
7.10 总结 144
第8章 创建MEAN的CURD模块 145
8.1 CURD模块简介 145
8.2 配置Express组件 145
8.2.1 创建Mongoose模型 146
8.2.2 建立Express控制器 147
8.2.3 编写Express路由 152
8.2.4 配置Express应用 153
8.3 ngResource模块简介 154
8.3.1 安装ngResource模块 154
8.3.2 使用$resource服务 156
8.4 实现AngularJS的MVC模块 157
8.4.1 创建模块服务 157
8.4.2 建立模块控制器 158
8.4.3 实现模块视图 161
8.4.4 编写AngularJS路由 164
8.5 最终实现 164
8.6 总结 166
第9章 基于Socketio的实时通信 167
9.1 WebSockets简介 167
9.2 Socket.io简介 168
9.2.1 Socket.io服务器端对象 169
9.2.2 Socket.io客户端对象 171
9.2.3 Socket.io的事件 171
9.2.4 Socket.io命名空间 174
9.2.5 Socket.io的房间 175
9.3 Socket.io的安装 176
9.3.1 配置Socket.io的服务器 177
9.3.2 配置Socket.io的会话 178
9.4 使用Socket.io创建聊天室 182
9.4.1 设置聊天服务器的事件处理程序 182
9.4.2 在AngularJS中创建Socket服务 184
9.4.3 控制器 185
9.4.4 视图 186
9.4.5 路由 186
9.4.6 实现 187
9.5 总结 189
第10章 MEAN应用的测试 190
10.1 JavaScript测试简介 190
10.1.1 TDD、BDD和单元测试 191
10.1.2 测试框架 192
10.1.3 断言库 192
10.1.4 测试执行过程管理工具 192
10.2 Express应用测试 193
10.2.1 Mocha简介 193
10.2.2 Should.js简介 194
10.2.3 SuperTest简介 194
10.2.4 Mocha的安装 195
10.2.5 安装Should.js和SuperTest模块 195
10.2.6 测试环境配置 196
10.2.7 编写Mocha测试 197
10.2.8 执行Mocha测试 201
10.3 AngularJS应用测试 202
10.3.1 Jasmine框架简介 203
10.3.2 AngularJS单元测试 203
10.3.3 AngularJS E2E测试 213
10.4 总结 217
第11章 MEAN应用的调试与自动化 218
11.1 构建工具Grunt 218
11.1.1 安装 218
11.1.2 Grunt的配置 220
11.2 使用node-inspector调试Express程序 230
11.2.1 使用Grunt任务安装node-inspector 231
11.2.2 使用Grunt任务配置node-inspector 232
11.2.3 使用Grunt任务运行调试 234
11.3 使用Batarang调试AngularJS程序 236
11.4 总结 241