具体描述
MEAN 是最流行的Web 开发工具的集合,包括MongoDB、Express、AngularJS 和Node.js。本书从 MEAN 的核心框架开始,详细阐述了每一种框架的关键概念,如何正确地设置它们,以及如何用流行的模 块把它们连接在一起。通过本书的实例练习,你能搭建自己的MEAN 应用架构,通过添加认证层,开发 MVC 架构支持自己的项目开发。最后,你将学会使用不同的工具和框架加快你的日常开发进程。
作者简介
Amos Q. Haviv
软件工程师,技术顾问,MEAN.IO和MEAN.JS的创建者。Amos有近十年的全栈开发经验,曾就职于多个创业公司和企业。过去的三年中,Amos一直在使用JavaScript的全栈解决方案进行开发,包括Node.js和MongoDB,以及AngularJS一类的前端MVC框架。2013年,他创建了MEAN应用的第一个样板MEAN.IO,目前在www.meanjs.org继续开发MEAN解决方案。他还在各类会议上做一些Web前沿技术的演讲。此外,他还为多家公司的开发团队提供指导。
目录信息
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章 基于Socket.io的实时通信 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
· · · · · · (收起)
读后感
因为工作的原因,对Node的了解一直停在一个浅尝辄止的阶段,了解其基础,熟悉脚本运行,但一直没有用它真正尝试web开发,这次看了这本《MEAN Web Development》算是入门了Node web开发,讲的非常的好,利用Express结合passport,mongoose连接mongodb, 前端使用AngularJS, 勾勒...
如果你之前连MEAN中的tutorial都没学习过,那这本书将会是你的噩梦,作者完全按照工程和实践的角度写书,写得很跳. 其实这不是什么问题,查查其他资料就行 但是各种错漏是什么鬼啊,这里少个引号,编译不过,那里印刷错误,看得头大,最可恨的是第六章, 被各种变量命名耍得团团转 - ...
如果你之前连MEAN中的tutorial都没学习过,那这本书将会是你的噩梦,作者完全按照工程和实践的角度写书,写得很跳. 其实这不是什么问题,查查其他资料就行 但是各种错漏是什么鬼啊,这里少个引号,编译不过,那里印刷错误,看得头大,最可恨的是第六章, 被各种变量命名耍得团团转 - ...
如果你之前连MEAN中的tutorial都没学习过,那这本书将会是你的噩梦,作者完全按照工程和实践的角度写书,写得很跳. 其实这不是什么问题,查查其他资料就行 但是各种错漏是什么鬼啊,这里少个引号,编译不过,那里印刷错误,看得头大,最可恨的是第六章, 被各种变量命名耍得团团转 - ...
如果你之前连MEAN中的tutorial都没学习过,那这本书将会是你的噩梦,作者完全按照工程和实践的角度写书,写得很跳. 其实这不是什么问题,查查其他资料就行 但是各种错漏是什么鬼啊,这里少个引号,编译不过,那里印刷错误,看得头大,最可恨的是第六章, 被各种变量命名耍得团团转 - ...
用户评价
这本书的实战案例部分简直是教科书级别的典范。我以前在网上找的那些教程,很多都是东拼西凑,代码片段要么版本过时,要么缺少上下文,学起来总是断断续续,效率极低。然而,这本书提供的项目是完整的、可运行的,并且作者非常细致地记录了每一步的思考过程。比如,在构建用户认证模块时,它不仅展示了如何写出认证代码,更深入地探讨了在不同安全等级下应该如何选择加密算法和Token管理策略,这远超出了我对一本入门级书籍的预期。当我跟着书中的指导搭建起第一个全栈应用时,那种成就感是无可比拟的。它让我体会到了从零到一构建一个健壮应用的真实体验,而不是停留在理论的空中楼阁。更赞的是,作者在代码注释中留下了许多“陷阱提示”和“性能优化点”,这些都是作者踩过无数坑后留下的宝贵经验,对于我们这些想少走弯路的后来者来说,价值连城。这不仅仅是一本书,更像是一个精心维护的、不断迭代的线上工程实践库。
这本书的封面设计得非常引人注目,那种深邃的蓝色调和简洁的字体搭配,一下子就抓住了我的眼球,让人对即将打开的知识殿堂充满了期待。从翻开第一页开始,我就被作者那种深入浅出的叙事风格深深吸引住了。它不像很多技术书籍那样枯燥乏味,充满了晦涩难懂的术语,而是像一位经验丰富的前辈在手把手地教你入门,每一个概念的引入都显得那么自然而然。我尤其欣赏它在基础概念上的铺垫,没有急于求成,而是花了大量的篇幅去解释“为什么”要这么做,而不是仅仅告诉你“怎么”做。这种注重底层逻辑的讲解方式,对于我这种非科班出身的自学者来说,简直是福音。读完前几章,我对整个前端和后端的协作模式有了一个全新的、更加清晰的认识,那些曾经困扰我的模块化加载和数据流向问题,现在都豁然开朗了。这本书的排版也非常舒服,适当的留白和恰到好处的代码示例穿插其中,使得长时间阅读也不会感到视觉疲劳。它真正做到了将复杂的系统拆解成易于消化的模块,让学习曲线变得异常平滑。我敢说,市面上很少有能把技术讲解得如此富有层次感和人文关怀的著作。
让我印象非常深刻的是,作者对于错误处理和调试环节的关注。很多技术书籍在讲完“如何实现功能”之后,往往就戛然而止了,仿佛代码写出来就万事大吉。但这本书却花了专门的章节来讨论“如果代码出错了怎么办”。它系统地介绍了如何利用浏览器开发者工具进行高效的断点调试,如何设置合理的日志级别,以及在分布式环境中如何追踪一个请求的完整生命周期。这部分内容极大地提升了我作为开发者的“健壮性思维”。我开始习惯性地去思考边界条件,去预见可能发生的用户异常操作,并提前设计好优雅的错误恢复机制。这种从“实现功能”到“保证稳定”的思维跨越,我认为是衡量一个初级开发者向高级开发者转变的关键一步,而这本书恰恰为我们提供了实现这种跨越的阶梯。内容详实,逻辑清晰,完全没有敷衍了事的感觉,真正体现了作者对软件工程严谨态度的尊重。
这本书在章节末尾设置的“思考与拓展”部分,简直是神来之笔。它没有直接给出答案,而是抛出了几个非常具有启发性的问题,促使读者跳出书本的框架,去查阅官方文档,去探索社区中的最佳实践。例如,它可能会引导你去思考:“如果你的应用用户量暴增十倍,现有缓存策略还适用吗?你会如何调整?”这种引导性的提问,极大地激发了我的主动探索欲。它成功地将阅读过程从被动的知识接收,转化为了主动的知识构建过程。这本书的价值也正在于此,它不仅仅是知识的载体,更是一个强大的学习催化剂。它培养了一种“终身学习者”的心态,让你明白技术书籍的阅读终点,正是你个人技术探索的起点。对于那些渴望从“会用”到“精通”的进阶型读者来说,这本书无疑是不可多得的良师益友。
阅读体验上,这本书在内容组织上体现了极高的专业水准。它并不是简单地罗列知识点,而是构建了一个严密的知识体系网络。你会发现,前一章介绍的某个概念,在后几章的应用场景中会以一种更加深入和成熟的方式被重新提及和使用,形成了完美的知识闭环。这种螺旋上升的学习路径,使得新知识能够有效地锚定在旧知识的基础之上,极大地加深了记忆和理解的深度。此外,作者对于技术选型的解释也相当到位。在介绍某个库或框架时,他会客观地分析其优点和潜在的局限性,而不是盲目推崇。比如,对于异步处理机制的讲解,他对比了好几种不同的实现方式,并给出了在不同业务场景下选择的最佳实践建议。这种辩证的分析方法,培养了我们批判性地看待技术趋势的能力,避免了盲目跟风的陷阱。读完后,我感觉自己不仅仅学会了一套技术栈的用法,更重要的是,掌握了一套系统的、可迁移的技术评估和学习方法论。
书是好书,不过怎么感觉第七章开始就乱写了呢,可能是我还没有相关背景知识吧
依照JS 全栈的线路写了一遍。
书是好书,不过怎么感觉第七章开始就乱写了呢,可能是我还没有相关背景知识吧
从前端到后端到数据库都有介绍,深入不多,但也介绍了不少关键知识点,这不是一本入门书,涉及多种知识学习node得同学值得一看。还有一点不得不说,就是错误地方太多,不要完全照着书里面敲代码,多是变量命名,文件命名以及大小写不统一的问题,出版社太马虎了。
从前端到后端到数据库都有介绍,深入不多,但也介绍了不少关键知识点,这不是一本入门书,涉及多种知识学习node得同学值得一看。还有一点不得不说,就是错误地方太多,不要完全照着书里面敲代码,多是变量命名,文件命名以及大小写不统一的问题,出版社太马虎了。