产品特色
        编辑推荐
    适读人群 :本书适合对HTML的基础知识已经有所了解,并可以用现代编程语言完成一些编程的读者。读者如果对JavaScript有一定了解,则将更易于理解本书的内容。 Node.js是一种领先的服务器端编程环境,MongoDB是非常流行的NoSQL数据库,而AngularJS正迅速成为基于MVC的前端开发的领先框架。它们结合在一起使得Web程序员能够完全用JavaScript创建从服务器到客户端的高性能站点和应用程序。
本书为想要将这3种技术整合到完整的有效解决方案的Web程序员提供了完整指南。它以这3种技术的简洁而清晰的教程开始,然后迅速转到构建几种常见的Web应用程序上面。
读者将学会如何使用Node.js和MongoDB来建立更具可扩展性的高性能网站,如何利用AngularJS的创新MVC方法构建更有效的网页和应用程序,以及如何把这3个结合在一起使用,从而提供卓越的下一代Web解决方案。
■ 使用Node.js和Express实现高度可扩展的动态Web服务器
■ 为你的Web应用程序实现一个MongoDB的数据存储
■ 从Node.js JavaScript代码访问MongoDB并与之互动
■ 定义扩展了HTML语言的自定义AngularJS指令
■ 用JavaScript构建服务器端Web服务
■ 实现可以与Node.js Web服务器交互的客户端服务
■ 构建提供丰富的用户交互的动态浏览器视图
■ 为Web应用程序和网页添加对用户账户的身份验证和嵌套评论的组件
      内容简介
   Node.js是一种较新的服务器端编程环境,MongoDB是非常流行的NoSQL数据库,而AngularJS正迅速成为基于MVC的前端开发的领先框架。它们结合在一起使得能够完全用JavaScript创建从服务器到客户端浏览器的高性能站点和应用程序。
本书为想要将这3种技术整合到全面的有效解决方案的全栈工程师提供了完整指南。它简洁而清晰地介绍了这3种技术,然后迅速转到构建几种常见的Web应用程序上面。
读者将学会使用Node.js和MongoDB来建立更具可扩展性的高性能网站,并利用AngularJS创新的MVC方法构建更有效的网页和应用程序,以及把这三者结合在一起使用,从而提供卓越的下一代Web解决方案。
     作者简介
   卢涛,ITPUBOracle开发版版主,15年IT工作经,2004年任高级工程师,在某数据管理中心任职系统分析师;曾参与数次全国数据处理系统的设计与实现。在软件开发、数据库开发和优化、系统架构、项目管理方面有一定研究。     
目录
   第2章 
目 录 
第1部分 引 言 
第1章 介绍Node.js-to-AngularJS套件 3 
1.1 了解基本的Web开发框架 3 
1.1.1 用户 4 
1.1.2 浏览器 4 
1.1.3 Web服务器 6 
1.1.4 后端服务 6 
1.2 了解Node.js-to-AngularJS套件组件 7 
1.2.1 Node.js 7 
1.2.2 MongoDB 8 
1.2.3 Express 9 
1.2.4 AngularJS 9 
1.3 小结 10 
1.4 下一章 10 
第2章 JavaScript基础 11 
2.1 定义变量 11 
2.2 了解JavaScript数据类型 12 
2.3 使用运算符 13 
2.3.1 算术运算符 13 
2.3.2 赋值运算符 14 
2.3.3 运用比较和条件运算符 14 
2.4 实现循环 16 
2.4.1 while循环 17 
2.4.2 do/while循环 17 
2.4.3 for循环 17 
2.4.4 for/in循环 18 
2.4.5 中断循环 19 
2.5 创建函数 19 
2.5.1 定义函数 20 
2.5.2 传递变量给函数 20 
2.5.3 从函数返回值 20 
2.5.4 使用匿名函数 21 
2.6 理解变量作用域 22 
2.7 使用JavaScript对象 22 
2.7.1 使用对象语法 23 
2.7.2 创建自定义对象 23 
2.7.3 使用原型对象模式 24 
2.8 处理字符串 25 
2.8.1 合并字符串 26 
2.8.2 在字符串中搜索子串 26 
2.8.3 在一个字符串中替换单词 27 
2.8.4 将字符串分割成数组 27 
2.9 使用数组 27 
2.9.1 合并数组 28 
2.9.2 遍历数组 29 
2.9.3 将数组转换为字符串 29 
2.9.4 检查数组是否包含某个条目 29 
2.9.5 在数组中添加条目和删除条目 30 
2.10 添加错误处理 30 
2.10.1 try/catch块 30 
2.10.2 抛出你自己的错误 31 
2.10.3 使用Finally 31 
2.11 小结 32 
2.12 下一章 32 
第2部分 学习Node.js 
第3章 开始使用Node.js 35 
3.1 了解Node.js 35 
3.1.1 谁在使用Node.js 35 
3.1.2 Node.js的用途 36 
3.2 Node.js安装 36 
3.2.1 纵观Node.js安装位置 36 
3.2.2 验证Node.js可执行文件 37 
3.2.3 选择Node.js IDE 37 
3.3 使用Node.js包 38 
3.3.1 什么是Node封装模块 38 
3.3.2 了解Node包注册表 38 
3.3.3 使用Node包管理器 38 
3.3.4 搜索Node封装模块 39 
3.3.5 安装Node封装模块 40 
3.3.6 使用package.json 41 
3.4 创建Node.js应用程序 43 
3.4.1 创建Node.js模块封装 43 
3.4.2 将一个Node.js封装模块发布到NPM注册表 45 
3.4.3 在Node.js应用程序中使用Node.js封装模块 46 
3.5 将数据写入控制台 47 
3.6 小结 49 
3.7 下一章 49 
第4章 在Node.js中使用事件、监听器、定时器和回调 51 
4.1 了解Node.js事件模型 51 
4.1.1 比较事件回调和线程模型 51 
4.1.2 在Node.js中阻塞I/O 52 
4.1.3 会话示例 54 
4.2 将工作添加到事件队列 54 
4.2.1 实现定时器 55 
4.2.2 使用nextTick来调度工作 58 
4.2.3 实现事件发射器和监听器 59 
4.3 实现回调 62 
4.3.1 向回调函数传递额外的参数 63 
4.3.2 在回调中实现闭包 64 
4.3.3 链式回调 65 
4.4 小结 66 
4.5 下一章 66 
第5章 在Node.js中处理数据I/O 67 
5.1 处理JSON 67 
5.1.1 把JSON转换成JavaScript对象 67 
5.1.2 把JavaScript对象转换为JSON 68 
5.2 使用Buffer模块缓冲数据 68 
5.2.1 了解缓冲数据 69 
5.2.2 创建缓冲区 69 
5.2.3 写入缓冲区 70 
5.2.4 从缓冲区读取 71 
5.2.5 确定缓冲区长度 72 
5.2.6 复制缓冲区 73 
5.2.7 对缓冲区切片 74 
5.2.8 拼接缓冲区 75 
5.3 使用Stream模块来传送数据 76 
5.3.1 Readable流 76 
5.3.2 Writable流 78 
5.3.3 Duplex流 81 
5.3.4 Transform流 82 
5.3.5 把Readable流用管道输送到Readable流 84 
5.4 用Zlib压缩与解压缩数据 85 
5.4.1 压缩和解压缩缓冲区 85 
5.4.2 压缩/解压缩流 87 
5.5 小结 88 
5.6 下一章 88 
第6章 从Node.js访问文件系统 89 
6.1 同步和异步文件系统调用 89 
6.2 打开和关闭文件 90 
6.3 写入文件 91 
6.3.1 简单文件写入 91 
6.3.2 同步文件写入 92 
6.3.3 异步写入文件 93 
6.3.4 流式文件写入 95 
6.4 读取文件 96 
6.4.1 简单文件读取 96 
6.4.2 同步文件读取 97 
6.4.3 异步文件读取 98 
6.4.4 流式文件读取 100 
6.5 其他文件系统任务 101 
6.5.1 验证路径的存在性 101 
6.5.2 获取文件信息 102 
6.5.3 列出文件 103 
6.5.4 删除文件 104 
6.5.5 截断文件 105 
6.5.6 建立和删除目录 105 
6.5.7 重命名文件和目录 106 
6.5.8 监视文件更改入 107 
6.6 小结 107 
6.7 下一章 107 
第7章 在Node.js中实现HTTP服务 109 
7.1 处理URL 109 
7.1.1 了解URL对象 110 
7.1.2 解析URL组件 111 
7.2 处理查询字符串和表单参数 111 
7.3 了解请求、响应和服务器对象 112 
7.3.1 http.ClientRequest对象 112 
7.3.2 http.ServerResponse对象 114 
7.3.3 http.IncomingMessage对象 115 
7.3.4 HTTP Server对象 116 
7.4 在Node.js中实现HTTP客户端和服务器 118 
7.4.1 提供静态文件服务 118 
7.4.2 实现动态的GET服务器 120 
7.4.3 实现POST服务器 122 
7.4.4 与外部源交互 124 
7.5 实现HTTPS服务器和客户端 127 
7.5.1 创建HTTPS客户端 127 
7.5.2 创建HTTPS服务器 129 
7.6 小结 129 
7.7 下一章 129 
第8章 在Node.js中实现套接字服务 131 
8.1 了解网络套接字 131 
8.2 了解TCP服务器和Socket对象 132 
8.2.1 net.Socket对象 132 
8.2.2 net.Server对象 135 
8.3 实现TCP套接字服务器和客户端 137 
8.3.1 实现TCP套接字客户端 138 
8.3.2 实现TCP套接字服务器 140 
8.4 实现TLS服务器和客户端 143 
8.4.1 创建TLS套接字客户端 144 
8.4.2 创建TLS套接字服务器 145 
8.5 小结 147 
8.6 下一章 147 
第9章 在Node.js中使用多处理器扩展应用程序 149 
9.1 了解process模块 149 
9.1.1 了解进程I/O管道 149 
9.1.2 了解进程的信号 150 
9.1.3 使用process模块控制进程执行 150 
9.1.4 从process模块获取信息 151 
9.2 实现子进程 153 
9.2.1 了解ChildProcess对象 153 
9.2.2 通过使用exec()在另一个进程上执行一个系统命令 154 
9.2.3 使用execFile()在另一个进程上执行一个可执行文件 156 
9.2.4 使用spawn()在另一个Node.js实例中产生一个进程 157 
9.2.5 实现子派生 159 
9.3 实现进程集群 161 
9.3.1 使用cluster模块 162 
9.3.2 了解Worker对象 163 
9.3.3 实现一个HTTP集群 164 
9.4 小结 166 
9.5 下一章 166 
第10章 使用其他Node.js模块 167 
10.1 使用os模块 167 
10.2 使用util模块 169 
10.2.1 格式化字符串 169 
10.2.2 检查对象类型 170 
10.2.3 同步写入输出流 170 
10.2.4 将JavaScript对象转换为字符串 170 
10.2.5 从其他对象继承功能 171 
10.2.6 使用dns模块 172 
10.3 小结 174 
10.4 下一章 174 
第3部分 学习MongoDB 
第11章 了解NoSQL和MongoDB 177 
11.1 为什么要采用NoSQL 177 
11.2 了解MongoDB 178 
11.2.1 理解集合 178 
11.2.2 了解文档 178 
11.3 MongoDB的数据类型 179 
11.4 规划你的数据模型 180 
11.4.1 使用文档引用来规范化数据 181 
11.4.2 使用嵌入式文档反规范化数据 182 
11.4.3 使用封顶集合 183 
11.4.4 了解原子写操作 184 
11.4.5 考虑文件增长 184 
11.4.6 识别索引、分片和复制的机会 184 
11.4.7 大集合与大量集合的对比 185 
11.4.8 决定数据生命周期 185 
11.4.9 考虑数据的可用性和性能 185 
11.5 小结 186 
11.6 下一章 186 
第12章 MongoDB入门 187 
12.1 构建MongoDB的环境 187 
12.1.1 MongoDB的安装 187 
12.1.2 启动MongoDB 188 
12.1.3 停止MongoDB 189 
12.1.4 从shell客户端访问MongoDB 189 
12.2 管理用户账户 192 
12.2.1 列出用户 192 
12.2.2 创建用户账户 193 
12.2.3 删除用户 194 
12.3 配置访问控制 194 
12.3.1 创建用户管理员账户 195 
12.3.2 打开身份验证 196 
12.3.3 创建数据库管理员账户 196 
12.4 管理数据库 197 
12.4.1 显示数据库清单 197 
12.4.2 切换当前数据库 197 
12.4.3 创建数据库 197 
12.4.4 删除数据库 198 
12.4.5 复制数据库 198 
12.5 管理集合 199 
12.5.1 显示数据库中的集合列表 199 
12.5.2 创建集合 199 
12.5.3 删除集合 200 
12.5.4 在集合中查找文档 201 
12.5.5 将文档添加到集合中 201 
12.5.6 从集合中删除文档 202 
12.5.7 更新集合中的文档 202 
12.6 小结 204 
12.7 下一章 204 
第13章 MongoDB和Node.js入门 205 
13.1 把MongoDB的驱动程序添加到Node.js 205 
13.2 从Node.js连接到MongoDB 206 
13.2.1 了解写入关注 206 
13.2.2 了解Server对象 206 
13.2.3 通过Client对象连接到MongoDB 207 
13.2.4 通过一个连接字符串连接到MongoDB 210 
13.3 了解用在MongoDB Node.js驱动程序中的对象 211 
13.3.1 了解Db对象 212 
13.3.2 了解Admin对象 213 
13.3.3 了解Collection对象 214 
13.3.4 了解Cursor对象 215 
13.4 访问和操作数据库 216 
13.4.1 列出数据库 217 
13.4.2 创建数据库 217 
13.4.3 删除数据库 217 
13.4.4 创建、列出和删除数据库实例 218 
13.4.5 获取MongoDB服务器的状态 219 
13.5 访问和操作集合 220 
13.5.1 列出集合 220 
13.5.2 创建集合 221 
13.5.3 删除集合 221 
13.5.4 创建、列出和删除集合的示例 221 
13.5.5 获取集合信息 222 
13.6 小结 223 
13.7 下一章 223 
第14章 从Node.js操作MongoDB文档 225 
14.1 了解数据库更改选项 225 
14.2 了解数据库更新运算符 226 
14.3 将文档添加到集合 227 
14.4 从集合获取文档 229 
14.5 更新集合中的文档 230 
14.6 原子地修改文档的集合 232 
14.7 保存集合中的文档 234 
14.8 使用upsert往集合中插入文档 235 
14.9 从集合中删除文档 236 
14.10 从集合中删除单个文档 238 
14.11 小结 240 
14.12 下一章 240 
第15章 从Node.js访问MongoDB的文档 241 
15.1 介绍数据集 241 
15.2 了解Query对象 242 
15.3 了解查询options对象 243 
15.4 查找特定文档集合 244 
15.5 清点文档数量 247 
15.6 对结果集进行限制 249 
15.6.1 按大小限制结果 249 
15.6.2 限制对象返回的字段 250 
15.6.3 对结果进行分页 252 
15.7 对结果集进行排序 253 
15.8 查找不同的字段值 255 
15.9 对结果进行分组 256 
15.10 通过聚合结果来应用MapReduce 259 
15.10.1 了解aggregate()方法 259 
15.10.2 使用聚合框架运算符 260 
15.10.3 实现聚合表达式运算符 261 
15.10.4 聚合的例子 262 
15.11 小结 263 
15.12 下一章 264 
第16章 利用Mongoose来使用结构化模式与验证 265 
16.1 了解Mongoose 265 
16.2 利用Mongoose连接到MongoDB数据库 266 
16.3 定义模式 267 
16.3.1 了解路径 268 
16.3.2 创建一个模式定义 268 
16.3.3 把索引添加到一个模式 269 
16.3.4 实现字段的唯一性 269 
16.3.5 强制字段的必需性 270 
16.3.6 添加Schema对象的方法 270 
16.3.7 在words数据库上实现一个模式 270 
16.4 编译模型 271 
16.5 了解Query对象 272 
16.5.1 设置查询数据库操作 273 
16.5.2 设置查询数据库操作选项 274 
16.5.3 设置查询运算符 275 
16.6 了解Document对象 276 
16.7 利用Mongoose查找文档 278 
16.8 利用Mongoose添加文档 280 
16.9 利用Mongoose更新文档 281 
16.9.1 保存文档更改 282 
16.9.2 更新单个文档 283 
16.9.3 更新多个文档 284 
16.10 利用Mongoose删除文档 286 
16.10.1 删除单个文档 286 
16.10.2 删除多个文档 287 
16.11 利用Mongoose聚合文档 288 
16.12 使用验证框架 291 
16.13 实现中间件函数 293 
16.14 小结 295 
16.15 下一章 295 
第17章 高级MongoDB概念 297 
17.1 添加索引 297 
17.2 使用封顶集合 299 
17.3 应用复制 300 
17.3.1 复制策略 302 
17.3.2 部署一个副本集 302 
17.4 实施分片 303 
17.4.1 分片服务器类型 304 
17.4.2 选择一个分片键 305 
17.4.3 选择一种分区方法 306 
17.4.4 部署一个分片的MongoDB集群 307 
17.5 实现一个GridFS Store 310 
17.5.1 在Node.js实现Grid对象 311 
17.5.2 在Node.js实现GridStore对象 313 
17.6 修复MongoDB数据库 315 
17.7 备份MongoDB 316 
17.8 小结 317 
17.9 下一章 317 
第4部分 使用Express使生活更轻松 
第18章 在Node.js中实现Express 321 
18.1 Express入门 321 
18.1.1 配置Express设置 321 
18.1.2 启动Express服务器 322 
18.2 配置路由 323 
18.2.1 实现路由 323 
18.2.2 在路由中应用参数 324 
18.3 使用Request对象 328 
18.4 使用Response对象 330 
18.4.1 设置标头 330 
18.4.2 设置状态 331 
18.4.3 发送响应 331 
18.4.4 发送JSON响应 333 
18.4.5 发送文件 335 
18.4.6 发送下载响应 336 
18.4.7 重定向响应 336 
18.5 实现一个模板引擎 337 
18.5.1 定义一个模板引擎 338 
18.5.2 加入本地对象 338 
18.5.3 创建模板 339 
18.5.4 在响应中呈现模板 340 
18.6 小结 342 
18.7 下一章 342 
第19章 实现Express中间件 343 
19.1 了解中间件 343 
19.1.1 在全局范围内把中间件分配给某个路径 344 
19.1.2 把中间件分配到单个路由 345 
19.1.3 添加多个中间件函数 345 
19.2 使用query中间件 345 
19.3 提供静态文件服务 346 
19.4 处理POST正文数据 348 
19.5 发送和接收cookie 349 
19.6 实现会话 350 
19.7 应用基本的HTTP身份验证 352 
19.8 实现会话身份验证 354 
19.9 创建自定义中间件 356 
19.10 小结 357 
19.11 下一章 357 
第5部分 学习AngularJS 
第20章 AngularJS入门 361 
20.1 为什么选择AngularJS 361 
20.2 了解AngularJS 362 
20.2.1 模块 362 
20.2.2 作用域和数据模型 363 
20.2.3 具有模板和指令的视图 363 
20.2.4 表达式 363 
20.2.5 控制器 363 
20.2.6 数据绑定 364 
20.2.7 服务 364 
20.2.8 依赖注入 364 
20.2.9 职责分离 364 
20.3 AngularJS生命周期概述 365 
20.3.1 引导阶段 365 
20.3.2 编译阶段 365 
20.3.3 运行时数据绑定阶段 366 
20.4 将AngularJS与现有的JavaScript和jQuery整合 366 
20.5 将AngularJS添加到Node.js的环境 367 
20.6 在HTML文档中引导AngularJS 367 
20.7 使用全局API 368 
20.8 创建基本的AngularJS应用程序 369 
20.8.1 加载AngularJS库和你的主模块 370 
20.8.2 定义AngularJS应用程序根元素 370 
20.8.3 将控制器添加到模板 370 
20.8.4 实现作用域模型 371 
20.9 小结 372 
20.10 下一章 372 
第21章 了解AngularJS模块和依赖注入 373 
21.1 模块和依赖注入概述 373 
21.1.1 了解模块 373 
21.1.2 依赖注入 374 
21.2 定义AngularJS模块 374 
21.2.1 创建AngularJS Module对象 374 
21.2.2 使用配置块 375 
21.2.3 使用运行块 375 
21.2.4 把提供器添加到AngularJS模块 376 
21.3 实现依赖注入 377 
21.4 小结 379 
21.5 下一章 380 
第22章 把作用域实现为数据模型 381 
22.1 了解作用域 381 
22.1.1 根作用域和应用程序之间的关系 381 
22.1.2 作用域和控制器之间的关系 382 
22.1.3 作用域和模板之间的关系 383 
22.1.4 作用域和后端服务器数据之间的关系 385 
22.1.5 作用域的生命周期 385 
22.2 实现作用域层次结构 387 
22.3 发出和广播活动 389 
22.4 小结 392 
22.5 下一章 393 
第23章 使用AngularJS模板来创建视图 395 
23.1 了解模板 395 
23.2 使用表达式 396 
23.3 使用过滤器 399 
23.3.1 使用内置过滤器 400 
23.3.2 使用过滤器来实现排序和过滤 402 
23.4 创建自定义过滤器 405 
23.5 小结 406 
23.6 下一章 407 
第24章 在AngularJS视图中实现指令 409 
24.1 了解指令 409 
24.2 使用内置指令 409 
24.2.1 支持AngularJS功能的指令 410 
24.2.2 扩展表单元素的指令 411 
24.2.3 把模型绑定到页面元素的指令 414 
24.2.4 把页面事件绑定到控制器的指令 418 
24.3 创建你自己的指令来扩展HTML 420 
24.3.1 定义指令视图模板 421 
24.3.2 限制指令行为 422 
24.3.3 更换模板元素 423 
24.3.4 转置外部作用域 423 
24.3.5 配置指令的作用域 423 
24.3.6 操纵DOM的链接功能 425 
24.3.7 添加一个控制器到指令 426 
24.3.8 创建自定义指令 426 
24.4 小结 428 
24.5 下一章 429 
第25章 在Web应用程序中实现AngularJS服务 431 
25.1 了解AngularJS服务 431 
25.2 使用内置的服务 431 
25.2.1 使用$http服务发送HTTP的GET和PUT请求 432 
25.2.2 使用$cacheFactory服务 436 
25.2.3 使用$window服务实现浏览器警报 437 
25.2.4 使用$cookieStore服务与浏览器cookie交互 437 
25.2.5 使用$interval和$timeout服务实现定时器 439 
25.2.6 使用$animate服务 440 
25.3 创建自定义服务 445 
25.3.1 创建value服务 445 
25.3.2 创建constant服务 445 
25.3.3 创建factory服务 445 
25.3.4 创建service服务 446 
25.3.5 把服务集成在一个模块中 446 
25.4 小结 447 
25.5 下一章 447 
第6部分 建立实用的Web应用程序组件 
第26章 将用户账户添加到你的网站 451 
26.1 用到的库 451 
26.2 项目的目录结构 451 
26.3 定义用户模型 452 
26.4 创建服务器 453 
26.5 实现路由 454 
26.6 实现用户控制器路由 456 
26.6.1 实现用户注册路由 456 
26.6.2 实现用户登录路由 457 
26.6.3 实现获得用户配置文件的路由 457 
26.6.4 实现更新用户路由 458 
26.6.5 实现删除用户路由 458 
26.6.6 完整的用户控制器代码 459 
26.7 实现用户和身份验证视图 461 
26.7.1 实现signup视图 461 
26.7.2 实现index视图 462 
26.7.3 实现login视图 463 
26.7.4 实现user视图 464 
26.7.5 添加CSS代码到样式视图 466 
26.8 实现AngularJS模块和控制器 466 
26.9 使用社交媒体账户作为身份验证来源 467 
26.9.1 添加Passport 467 
26.9.2 添加身份验证策略 467 
26.9.3 实现应用程序中间件 468 
26.9.4 添加已验证身份的用户序列化和反序列化 469 
26.9.5 实现路由以使用身份验证 469 
26.9.6 使用谷歌验证身份 470 
26.10 小结 473 
26.11 下一章 473 
第27章 添加评论主题页 475 
27.1 用到的库 475 
27.2 项目的目录结构 475 
27.3 定义评论、回复、照片和页面模型 477 
27.3.1 定义Page模型 477 
27.3.2 定义Photo模型 478 
27.3.3 定义CommentThread模型 478 
27.4 创建评论服务器 479 
27.5 实现路由,以支持查看和添加评论 480 
27.6 实现基于模型的控制器路由 481 
27.6.1 实现Page模型控制器 481 
27.6.2 实现Photo模型控制器 482 
27.6.3 实现CommentThread模型控制器 482 
27.7 实现照片和评论视图 486 
27.7.1 实现照片视图 486 
27.7.2 实现评论主题视图 489 
27.7.3 实现评论视图 491 
27.7.4 添加CSS来设置视图的样式 492 
27.8 实现AngularJS模块和控制器来支持评论视图 493 
27.8.1 创建一个评论服务 493 
27.8.2 实现照片控制器 494 
27.8.3 实现页面AngularJS控制器 495 
27.8.4 完整的AngularJS应用程序 496 
27.9 初始化应用程序 499 
27.10 小结 500 
27.11 下一章 500 
第28章 创建你自己的购物车 501 
28.1 项目简介 501 
28.2 用到的库 502 
28.3 项目的目录结构 502 
28.4 定义顾客、产品和订单模式 504 
28.4.1 定义地址模式 504 
28.4.2 定义账单模式 505 
28.4.3 定义产品模式 505 
28.4.4 定义数量模式 506 
28.4.5 定义订单模式 506 
28.4.6 定义顾客模式 506 
28.5 创建购物车服务器 508 
28.6 实现路由,以支持产品、购物车和订单请求 508 
28.7 实现基于模型的控制器路由 509 
28.7.1 实现产品模型控制器 509 
28.7.2 实现订单模型控制器 510 
28.7.3 实现顾客模型控制器 511 
28.8 实现购物车和结账视图 513 
28.8.1 实现购物视图 513 
28.8.2 实现产品视图 515 
28.8.3 实现产品页面视图 516 
28.8.4 实现购物车视图 516 
28.8.5 实现发货视图 518 
28.8.6 实现账单视图 519 
28.8.7 实现复核视图 521 
28.8.8 实现订单视图 523 
28.8.9 添加CSS来设置视图的样式 524 
28.9 实现AngularJS模块和控制器,以支持购物车视图 526 
28.9.1 初始化购物作用域 526 
28.9.2 实现辅助函数 527 
28.9.3 将物品添加到购物车 527 
28.9.4 从购物车删除物品 528 
28.9.5 结账 529 
28.9.6 设置发货信息 529 
28.9.7 验证账单 530 
28.9.8 执行购买 530 
28.9.9 完整的控制器 531 
28.10 初始化应用程序 534 
28.11 小结 536 
28.12 下一章 536 
第29章 构建交互式的Web 2.0应用程序组件 537 
29.1 项目简介 537 
29.2 用到的库 538 
29.3 项目的目录结构 538 
29.4 定义项目模型 540 
29.5 创建应用程序服务器 540 
29.6 实现支持视图的路由 541 
29.7 实现选项卡视图 542 
29.7.1 创建AngularJS选项卡视图模板 542 
29.7.2 定义窗格模板 542 
29.7.3 定义卡片模板 542 
29.7.4 实现选项卡视图 543 
29.7.5 实现AngularJS自定义指令 544 
29.7.6 设置卡片视图的样式 545 
29.8 实现天气服务视图 546 
29.8.1 创建后端天气服务 546 
29.8.2 定义天气AngularJS控制器 548 
29.8.3 定义天气AngularJS视图 549 
29.8.4 设置天气视图的样式 549 
29.9 实现可拖动的元素 551 
29.9.1 定义可拖动的自定义AngularJS指令 551 
29.9.2 在AngularJS视图中实现可拖动的指令 552 
29.9.3 设置可拖动视图的样式 552 
29.10 实现动态数据访问 553 
29.10.1 创建/words路由的Express路由控制器 553 
29.10.2 定义表格AngularJS控制器 554 
29.10.3 实现表格AngularJS视图 556 
29.10.4 设置表格视图的样式 557 
29.11 初始化应用程序 558 
29.12 小结 560      
前言/序言
       
				 
				
				
					现代Web开发的基石:深入解析 Node.js、MongoDB 和 AngularJS 的协同之道  在当今快速发展的数字时代,构建高效、可扩展且用户友好的Web应用程序已经成为企业成功的关键。而掌握一整套强大的现代技术栈,并理解它们如何协同工作,是每一位有志于在Web开发领域有所建树的开发者必须迈出的步伐。本书将带您踏上一段深入探索Node.js、MongoDB和AngularJS这三大核心技术的旅程,揭示它们各自的强大之处,更重要的是,将详细阐述它们如何在实际项目中无缝集成,共同构建出引人入胜的现代Web应用。  Node.js:前端开发者迈向全栈的桥梁  曾几何时,JavaScript仅限于浏览器端,承担着页面的动态交互任务。然而,Node.js的出现彻底打破了这一格局。它允许JavaScript脱离浏览器环境,运行在服务器端,使得前端开发者能够用同一门语言构建完整的Web应用,极大地提高了开发效率和团队协作的顺畅度。  本书将从Node.js的基础概念入手,深入讲解其核心特性。您将学习到Node.js的事件驱动、非阻塞I/O模型是如何实现高并发和卓越性能的。我们将详细剖析Node.js的包管理器npm(Node Package Manager),它是Node.js生态系统中不可或缺的一部分,拥有海量的开源模块,能够轻松解决项目中遇到的各种问题,从路由管理到模板渲染,再到数据库交互。您将掌握如何使用npm安装、管理和发布自己的模块,从而充分利用这个庞大的开源宝库。  数据处理是Web应用的核心。本书将深入探讨Node.js在数据处理方面的能力。您将学习如何使用Node.js构建RESTful API,这是现代Web应用之间进行数据交互的标准方式。我们将详细介绍Express.js,它是Node.js生态中最流行、最灵活的Web应用框架之一。通过Express.js,您可以轻松地定义路由、处理HTTP请求、中间件和响应,快速构建出健壮的后端服务。此外,您还将了解如何集成诸如Passport.js这样的身份验证和授权模块,为您的应用提供安全保障。  在性能优化方面,本书不会止步于基础。您将学习如何利用Node.js的异步编程特性,深入理解回调函数、Promise和Async/Await的运用,编写出高效、可维护的代码。我们将探讨如何进行性能瓶颈的分析和优化,包括缓存策略、进程管理以及对Node.js事件循环的深入理解,帮助您构建出能够承受巨大流量的应用。  MongoDB:灵活、强大的NoSQL数据库解决方案  在数据存储方面,关系型数据库(SQL)长期占据主导地位。然而,随着Web应用的复杂性日益增加,对数据模型灵活性、可扩展性和开发速度的要求也越来越高,NoSQL数据库应运而生。MongoDB作为一款领先的文档型NoSQL数据库,以其灵活的数据模型、易用的API和卓越的性能,赢得了广大开发者的青睐。  本书将为您系统地介绍MongoDB的核心概念。您将理解文档(Document)、集合(Collection)和数据库(Database)的基本结构。MongoDB采用BSON(Binary JSON)格式存储数据,这使得它与JavaScript对象模型高度契合,极大地简化了数据在应用程序和数据库之间的转换过程。  我们将详细讲解MongoDB的查询语言,这是掌握MongoDB的关键。您将学习如何执行各种类型的查询,包括基于字段的匹配、范围查询、正则表达式匹配,以及如何使用聚合管道(Aggregation Pipeline)进行复杂的数据分析和转换。本书将通过丰富的实例,演示如何高效地检索、插入、更新和删除数据,并深入探讨索引的重要性,以及如何创建和优化索引以提升查询性能。  在实际应用中,数据的安全和可扩展性至关重要。本书将涵盖MongoDB的安全特性,包括用户认证、访问控制和数据加密。同时,您还将学习到MongoDB的可扩展性方案,如副本集(Replica Set)和分片(Sharding),它们能够保证数据的高可用性和处理海量数据的能力,为您的应用提供坚实的数据支撑。  AngularJS:构建富交互、单页面应用的利器  用户体验是Web应用成功的关键。AngularJS,作为一款强大的前端JavaScript框架,使得构建复杂、富交互的单页面应用(SPA)变得前所未有的简单。它引入了许多革命性的概念,如MVC(Model-View-Controller)或MVVM(Model-View-ViewModel)架构模式、数据绑定、依赖注入和指令(Directives),极大地提升了前端开发的效率和代码的可维护性。  本书将从AngularJS的基础概念开始,逐步深入。您将学习到AngularJS的核心组成部分,包括作用域(Scope)、控制器(Controller)、服务(Service)、工厂(Factory)和指令。数据绑定是AngularJS的一大亮点,我们将详细解释双向数据绑定是如何工作的,以及它如何减少手动DOM操作,使UI与数据模型保持实时同步。  指令(Directives)是AngularJS的强大之处,它们允许您扩展HTML的语法,创建自定义的UI组件。本书将教您如何创建和使用内置指令,如`ng-repeat`、`ng-if`、`ng-click`等,以及如何编写自定义指令来构建可重用的UI元素,从而实现代码的模块化和复用。  在构建单页面应用时,路由管理是不可或缺的。我们将深入讲解AngularJS的路由模块(ngRoute或UI-Router),以及如何配置和管理不同的视图和URL,实现无页面刷新的流畅用户体验。  本书还将重点关注AngularJS的模块化开发和依赖注入。您将学习如何组织您的AngularJS代码,将应用分解成可管理的模块,以及如何利用依赖注入来管理组件之间的关系,使代码更易于测试和维护。我们还将探讨单元测试和端到端测试在AngularJS开发中的重要性,以及如何使用Karma和Protractor等工具来保证代码的质量。  Node.js + MongoDB + AngularJS:全栈开发协同之道  本书的真正价值在于,它不仅仅是分别介绍这三项技术,更重要的是,它将详细阐述它们如何有机地结合在一起,构建一个完整的、高效的、可扩展的Web应用。  您将学习到如何使用Node.js作为后端服务器,通过Express.js构建RESTful API,处理来自AngularJS前端的请求。我们将详细演示如何使用MongoDB作为数据库,存储和检索数据,并将其通过Node.js API暴露给前端。  本书将深入讲解前后端数据交互的最佳实践。您将学习如何设计API接口,如何处理JSON数据,以及如何利用HTTP协议进行有效的通信。我们将演示如何在AngularJS中发起HTTP请求,如何处理API响应,以及如何将数据有效地绑定到UI上。  更重要的是,本书将引导您构建一个完整的Web应用案例,涵盖从项目搭建、数据模型设计、后端API开发、前端UI实现,到最终的部署上线。通过这个贯穿全书的案例,您将亲身体验到Node.js、MongoDB和AngularJS在实际开发中的协同工作流程,理解它们之间的化学反应,掌握构建现代Web应用的全套技能。  本书适合的读者     希望从前端开发转向全栈开发的JavaScript开发者。    希望掌握现代Web应用开发主流技术栈的初学者。    希望提升Web应用性能、可扩展性和用户体验的开发者。    希望深入理解Node.js、MongoDB和AngularJS之间协同工作机制的专业人士。  结语  在这个日新月异的技术浪潮中,掌握一套强大的、相互关联的技术栈是保持竞争力的关键。本书旨在为您提供一条清晰的学习路径,让您能够自信地驾驭Node.js、MongoDB和AngularJS这三大技术巨头,构建出令人印象深刻的现代Web应用。让我们一同开启这段精彩的Web开发之旅!