编辑推荐
适读人群:《Node.js+MongoDB+AngularJS Web开发》适合对HTML的基础知识已经有所了解,并可以用现代编程语言完成一些编程的读者。读者如果对JavaScript有一定了解,则将更易于理解《Node.js+MongoDB+AngularJS Web开发》的内容。
Node.js是一种领先的服务器端编程环境,MongoDB是非常流行的NoSQL数据库,而AngularJS正迅速成为基于MVC的前端开发的领先框架。它们结合在一起使得Web程序员能够完全用JavaScript创建从服务器到客户端的高性能站点和应用程序。
《Node.js+MongoDB+AngularJS Web开发》为想要将这3种技术整合到完整的有效解决方案的Web程序员提供了完整指南。它以这3种技术的简洁而清晰的教程开始,然后迅速转到构建几种常见的Web应用程序上面。
读者将学会如何使用Node.js和MongoDB来建立更具可扩展性的高性能网站,如何利用AngularJS的创新MVC方法构建更有效的网页和应用程序,以及如何把这3个结合在一起使用,从而提供卓越的下一代Web解决方案。
■使用Node.js和Express实现高度可扩展的动态Web服务器
■为你的Web应用程序实现一个MongoDB的数据存储
■从Node.jsJavaScript代码访问MongoDB并与之互动
■定义扩展了HTML语言的自定义AngularJS指令
■用JavaScript构建服务器端Web服务
■实现可以与Node.jsWeb服务器交互的客户端服务
■构建提供丰富的用户交互的动态浏览器视图
■为Web应用程序和网页添加对用户账户的身份验证和嵌套评论的组件
内容简介
Node.js是一种较新的服务器端编程环境,MongoDB是非常流行的NoSQL数据库,而AngularJS正迅速成为基于MVC的前端开发的领先框架。它们结合在一起使得能够完全用JavaScript创建从服务器到客户端浏览器的高性能站点和应用程序。
《Node.js+MongoDB+AngularJS Web开发》为想要将这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.3Web服务器6
1.1.4后端服务6
1.2了解Node.js-to-AngularJS套件组件7
1.2.1Node.js7
1.2.2MongoDB8
1.2.3Express9
1.2.4AngularJS9
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.1while循环17
2.4.2do/while循环17
2.4.3for循环17
2.4.4for/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.1try/catch块30
2.10.2抛出你自己的错误31
2.10.3使用Finally31
2.11小结32
2.12下一章32
第2部分学习Node.js
第3章开始使用Node.js35
3.1了解Node.js35
3.1.1谁在使用Node.js35
3.1.2Node.js的用途36
3.2Node.js安装36
3.2.1纵观Node.js安装位置36
3.2.2验证Node.js可执行文件37
3.2.3选择Node.jsIDE37
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.json41
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/O52
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/O67
5.1处理JSON67
5.1.1把JSON转换成JavaScript对象67
5.1.2把JavaScript对象转换为JSON68
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.1Readable流76
5.3.2Writable流78
5.3.3Duplex流81
5.3.4Transform流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处理URL109
7.1.1了解URL对象110
7.1.2解析URL组件111
7.2处理查询字符串和表单参数111
7.3了解请求、响应和服务器对象112
7.3.1http.ClientRequest对象112
7.3.2http.ServerResponse对象114
7.3.3http.IncomingMessage对象115
7.3.4HTTPServer对象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.1net.Socket对象132
8.2.2net.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和MongoDB177
11.1为什么要采用NoSQL177
11.2了解MongoDB178
11.2.1理解集合178
11.2.2了解文档178
11.3MongoDB的数据类型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.1MongoDB的安装187
12.1.2启动MongoDB188
12.1.3停止MongoDB189
12.1.4从shell客户端访问MongoDB189
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.js205
13.2从Node.js连接到MongoDB206
13.2.1了解写入关注206
13.2.2了解Server对象206
13.2.3通过Client对象连接到MongoDB207
13.2.4通过一个连接字符串连接到MongoDB210
13.3了解用在MongoDBNode.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通过聚合结果来应用MapReduce259
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了解Mongoose265
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实现一个GridFSStore310
17.5.1在Node.js实现Grid对象311
17.5.2在Node.js实现GridStore对象313
17.6修复MongoDB数据库315
17.7备份MongoDB316
17.8小结317
17.9下一章317
第4部分使用Express使生活更轻松
第18章在Node.js中实现Express321
18.1Express入门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发送和接收cookie349
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为什么选择AngularJS361
20.2了解AngularJS362
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.3AngularJS生命周期概述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文档中引导AngularJS367
20.7使用全局API368
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创建AngularJSModule对象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创建你自己的指令来扩展HTML420
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添加Passport467
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章构建交互式的Web2.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