书籍详情

MongoDB+Express+Angular+Node.js全栈开发实战派

MongoDB+Express+Angular+Node.js全栈开发实战派

作者:柳伟卫 著

出版社:电子工业出版社

出版时间:2020-05-01

ISBN:9787121379932

定价:¥109.00

购买这本书可以去
内容简介
  以MongoDB、Express、Angular和Node.js四种技术为核心的技术栈(MEAN架构),被广泛应用于全栈Web开发。本书最终带领读者从零开始实现一个完整的、企业级的、前后端分离的应用――“新闻头条”,使读者具备用MEAN架构完整开发企业级应用的能力。本书分为6篇。第1篇介绍MEAN架构的基础概念,使读者对MEAN架构有一个初步的印象。第2篇介绍全栈开发平台Node.js的常用知识点,包括模块、测试、缓冲区、事件处理、文件处理、HTTP编程等。第3篇介绍Web服务器Express的常用知识点。第4篇介绍NoSQL数据库MongoDB的常用知识点,以及其在Node.js中的应用。第5篇介绍前端应用开发平台Angular的常用知识点,包括组件、模板、数据绑定、指令、服务、依赖注入、路由、响应式编程、HTTP客户端等。第6篇带领读者实现一个完整的应用――“新闻头条”。第2~5篇介绍了58个实例,将理论讲解最终落实到代码实现上。随着图书内容的推进,这些实例不断趋近于工程项目,具有很高的应用价值和参考价值。本书由浅入深、层层推进、结构清晰、实例丰富、通俗易懂、实用性强,适合MEAN架构的初学者和进阶读者作为自学用书,也适合培训学校作为培训教材,还适合大、中专院校的相关专业作为教学参考书。
作者简介
  柳伟卫,网名老卫、waylau一线互联网公司架构师,CSDN、开源中国、云栖社区等社区技术专家,慕课网讲师。具有多年软件开发管理及系统架构经验。负责过多个省、***分布式系统的设计与研发,参与了多个大型项目微服务架构的技术改造。通过aylau.com分享个人技术心得。
目录
====第1篇 初识MEAN
-
第1章 MEAN架构概述\t2
1.1 MEAN架构核心技术栈的组成\t2
| 1.1.1 MongoDB\t2
| 1.1.2 Express\t3
| 1.1.3 Angular\t3
| 1.1.4 Node.js\t3
1.2 MEAN架构周边技术栈的组成\t4
| 1.2.1 NG-ZORRO\t4
| 1.2.2 ngx-Markdown\t4
| 1.2.3 NGINX\t5
| 1.2.4 basic-auth\t5
1.3 MEAN架构的优势\t5
1.4 开发工具的选择\t8
-
====第2篇 Node.js――全栈开发平台
-
第2章 Node.js基础\t10
2.1 Node.js简介\t10
| 2.1.1 Node.js简史\t10
| 2.1.2 为什么叫Node.js\t12
2.2 Node.js的特点\t13
2.3 安装Node.js\t17
| 2.3.1 安装Node.js和NPM\t17
| 2.3.2 Node.js与NPM的关系\t17
| 2.3.3 安装NPM镜像\t18
2.4 第1个Node.js应用\t18
| 2.4.1 【实例1】创建Node.js应用\t18
| 2.4.2 【实例2】运行Node.js应用\t18
| 2.4.3 总结\t19
-
第3章 Node.js模块――大型项目管理之道\t20
3.1 理解模块化机制\t20
| 3.1.1 理解CommonJS规范\t20
| 3.1.2 理解ES 6模块\t22
| 3.1.3 CommonJS和ES 6模块的异同点\t24
| 3.1.4 Node.js的模块实现\t25
3.2 使用NPM管理模块\t26
| 3.2.1 用npm命令安装模块\t27
| 3.2.2 全局安装与本地安装\t27
| 3.2.3 查看安装信息\t28
| 3.2.4 卸载模块\t28
| 3.2.5 更新模块\t29
| 3.2.6 搜索模块\t29
| 3.2.7 创建模块\t29
3.3 Node.js的核心模块\t29
-
第4章 Node.js测试\t31
4.1 严格模式和遗留模式\t31
4.2 【实例3】断言的使用\t32
4.3 了解AssertionError\t33
4.4 【实例4】使用deepStrictEqual\t34
-
第5章 Node.js缓冲区――高性能I/O处理的秘诀\t38
5.1 了解Buffer类\t38
| 5.1.1 TypedArray对象\t39
| 5.1.2 Buffer类\t39
5.2 创建缓冲区\t40
| 5.2.1 初始化缓冲区的API\t41
| 5.2.2 理解数据的安全性\t41
| 5.2.3 启用零填充\t42
| 5.2.4 指定字符编码\t43
5.3 切分缓冲区\t43
5.4 链接缓冲区\t45
5.5 比较缓冲区\t46
5.6 缓冲区编/解码\t46
| 5.6.1 解码器和编码器\t47
| 5.6.2 缓冲区解码\t47
| 5.6.3 缓冲区编码\t48
-
第6章 Node.js事件处理\t50
6.1 理解事件和回调\t50
| 6.1.1 事件循环\t51
| 6.1.2 事件驱动\t51
6.2 事件发射器\t52
| 6.2.1 将参数传给监听器\t52
| 6.2.2 异步与同步\t53
| 6.2.3 仅处理事件一次\t53
6.3 事件类型\t54
| 6.3.1 事件类型的定义\t54
| 6.3.2 内置的事件类型\t55
| 6.3.3 error事件\t55
6.4 事件的操作\t57
| 6.4.1 【实例5】设置最大监听器\t58
| 6.4.2 【实例6】获取已注册事件的名称\t58
| 6.4.3 【实例7】获取监听器数组的副本\t59
| 6.4.4 【实例8】将事件监听器添加到监听器数组的开头\t59
| 6.4.5 【实例9】移除监听器\t60
-
第7章 Node.js文件处理\t63
7.1 了解fs模块\t63
| 7.1.1 同步与异步操作文件\t63
| 7.1.2 文件描述符\t65
7.2 处理文件路径\t66
| 7.2.1 字符串形式的路径\t66
| 7.2.2 Buffer形式的路径\t67
| 7.2.3 URL对象的路径\t68
7.3 打开文件\t69
| 7.3.1 文件系统标志\t69
| 7.3.2 【实例10】打开文件的例子\t71
7.4 读取文件\t72
| 7.4.1 【实例11】用fs.read()方法读取文件\t72
| 7.4.2 【实例12】用fs.readdir()方法读取文件\t73
| 7.4.3 【实例13】用fs.readFile()方法读取文件\t74
7.5 写入文件\t75
| 7.5.1 【实例14】将Buffer写入文件\t75
| 7.5.2 【实例15】将字符串写入文件\t77
| 7.5.3 【实例16】将数据写入文件\t78
-
第8章 Node.js HTTP编程\t80
8.1 创建HTTP服务器\t80
| 8.1.1 【实例17】用http.Server创建服务器\t80
| 8.1.2 理解http.Server事件的用法\t81
8.2 处理HTTP的常用操作\t83
8.3 请求对象和响应对象\t84
| 8.3.1 理解http.ClientRequest类\t84
| 8.3.2 理解http.ServerResponse类\t88
8.4 REST概述\t91
| 8.4.1 REST的定义\t92
| 8.4.2 REST的设计原则\t92
8.5 成熟度模型\t94
| 8.5.1 第0级:用HTTP作为传输方式\t94
| 8.5.2 第1级:引入了资源的概念\t96
| 8.5.3 第2级:根据语义使用HTTP动词\t97
| 8.5.4 第3级:使用HATEOAS\t98
8.6 【实例18】构建REST服务的例子\t100
| 8.6.1 新增用户\t101
| 8.6.2 修改用户\t102
| 8.6.3 删除用户\t103
| 8.6.4 响应请求\t104
| 8.6.5 运行应用\t105
-
====第3篇 Express――Web服务器
-
第9章 Express基础\t110
9.1 安装Express\t110
9.2 【实例19】编写“Hello World”应用\t112
9.3 【实例20】运行“Hello World”应用\t112
-
第10章 Express路由――页面的导航员\t114
10.1 路由方法\t114
10.2 路由路径\t115
| 10.2.1 【实例21】基于字符串的路由路径\t116
| 10.2.2 【实例22】基于字符串模式的路由路径\t116
| 10.2.3 【实例23】基于正则表达式的路由路径\t117
10.3 路由参数\t117
10.4 路由处理器\t118
| 10.4.1 【实例24】单个回调函数\t118
| 10.4.2 【实例25】多个回调函数\t118
| 10.4.3 【实例26】一组回调函数\t118
| 10.4.4 【实例27】独立函数和函数数组的组合\t119
10.5 响应方法\t119
10.6 【实例28】基于Express构建REST API\t120
10.7 测试Express的REST API\t122
| 10.7.1 测试用于创建用户的API\t122
| 10.7.2 测试用于删除用户的API\t122
| 10.7.3 测试用于修改用户的API\t123
| 10.7.4 测试用于查询用户的API\t124
-
第11章 Express错误处理器\t125
11.1 捕获错误\t125
11.2 默认错误处理器\t127
11.3 自定义错误处理器\t128
-
====第4篇 MongoDB篇――NoSQL数据库
-
第12章 MongoDB基础\t132
12.1 MongoDB简介\t132
12.2 安装MongoDB\t133
12.3 启动MongoDB服务\t134
12.4 链接MongoDB服务器\t135
-
第13章 MongoDB的常用操作\t136
13.1 显示已有的数据库\t136
13.2 创建、使用数据库\t136
13.3 插入文档\t137
| 13.3.1 【实例29】插入单个文档\t137
| 13.3.2 【实例30】插入多个文档\t138
13.4 查询文档\t139
| 13.4.1 嵌套文档查询\t139
| 13.4.2 嵌套字段查询\t139
| 13.4.3 使用查询运算符\t140
| 13.4.4 多条件查询\t140
13.5 修改文档\t140
| 13.5.1 修改单个文档\t141
| 13.5.2 修改多个文档\t141
| 13.5.3 替换单个文档\t142
13.6 删除文档\t142
| 13.6.1 删除单个文档\t143
| 13.6.2 删除多个文档\t143
-
第14章 【实例31】使用Node.js操作MongoDB\t144
14.1 安装mongodb模块\t144
14.2 访问MongoDB\t145
14.3 运行应用\t146
-
第15章 mongodb模块的综合应用\t148
15.1 【实例32】建立连接\t148
15.2 【实例33】插入文档\t149
15.3 【实例34】查找文档\t150
15.4 修改文档\t152
| 15.4.1 【实例35】修改单个文档\t153
| 15.4.2 【实例36】修改多个文档\t157
15.5 删除文档\t158
| 15.5.1 【实例37】删除单个文档\t158
| 15.5.2 【实例38】删除多个文档\t159
-
====第5篇 Angular――前端应用开发平台
-
第16章 Angular基础\t162
16.1 常见的UI编程框架\t162
| 16.1.1 Angular与jQuery的不同\t162
| 16.1.2 Angular与React、Vue.js优势对比\t164
| 16.1.3 Angular、React、Vue.js三者怎么选\t165
16.2 Angular的安装\t165
16.3 Angular CLI的常用操作\t166
| 16.3.1 获取帮助\t166
| 16.3.2 创建应用\t167
| 16.3.3 创建组件\t167
| 16.3.4 创建服务\t167
| 16.3.5 启动应用\t167
| 16.3.6 添加依赖\t167
| 16.3.7 升级依赖\t167
16.3.8 自动化测试\t167
| 16.3.9 下载依赖\t168
| 16.3.10 编译\t168
16.4 Angular架构概览\t168
| 16.4.1 模块\t169
| 16.4.2 组件\t170
| 16.4.3 模板、指令和数据绑定\t170
| 16.4.4 服务与依赖注入\t170
| 16.4.5 路由\t170
16.5 【实例39】创建第1个Angular应用\t171
| 16.5.1 使用Angular CLI初始化应用\t171
| 16.5.2 运行Angular应用\t173
| 16.5.3 了解src文件夹\t174
| 16.5.4 了解根目录\t175
-
第17章 Angular模块――大型前端应用管理之道\t178
17.1 模块概述\t178
| 17.1.1 什么是模块化\t178
| 17.1.2 认识基本模块\t179
| 17.1.3 认识特性模块\t180
17.2 引导启动\t180
| 17.2.1 了解declarations数组\t181
| 17.2.2 了解imports数组\t182
| 17.2.3 了解providers数组\t182
| 17.2.4 了解bootstrap数组\t182
17.3 常用模块\t182
| 17.3.1 常用模块\t182
| 17.3.2 BrowserModule和CommonModule\t183
17.4 特性模块\t183
| 17.4.1 领域特性模块\t183
| 17.4.2 带路由的特性模块\t184
| 17.4.3 路由模块\t184
| 17.4.4 服务特性模块\t184
| 17.4.5 可视部件特性模块\t185
17.5 入口组件\t185
| 17.5.1 引导用的入口组件\t185
| 17.5.2 路由用的入口组件\t186
| 17.5.3 entryComponents\t186
| 17.5.4 编译优化\t186
-
第18章 Angular组件――独立的开发单元\t187
18.1 数据展示\t187
| 18.1.1 【实例40】数据展示的例子\t187
| 18.1.2 使用插值表达式显示组件属性\t189
| 18.1.3 组件关联模板的两种方式\t189
| 18.1.4 在模板中使用指令\t190
18.2 生命周期\t190
| 18.2.1 生命周期钩子\t190
| 18.2.2 【实例41】生命周期钩子的例子\t191
| 18.2.3 生命周期钩子的顺序\t193
| 18.2.4 了解OnInit()钩子\t194
| 18.2.5 了解OnDestroy()钩子\t195
| 18.2.6 了解OnChanges()钩子\t196
| 18.2.7 了解DoCheck()钩子\t196
| 18.2.8 了解AfterView钩子\t197
| 18.2.9 了解AfterContent钩子\t197
18.3 组件的交互方式\t197
| 18.3.1 【实例42】通过@Input把数据从父组件传到子组件\t197
| 18.3.2 【实例43】通过set()方法截听输入属性值的变化\t199
| 18.3.3 【实例44】通过ngOnChanges()方法截听输入属性值的变化\t200
| 18.3.4 【实例45】用父组件监听子组件的事件\t202
| 18.3.5 【实例46】父组件与子组件通过本地变量进行交互\t204
| 18.3.6 【实例47】父组件调用@ViewChild()方法获取子组件的值\t206
| 18.3.7 【实例48】父组件和子组件通过服务来通信\t207
18.4 样式\t210
| 18.4.1 【实例49】使用组件样式的例子\t211
| 18.4.2 样式的作用域\t211
| 18.4.3 特殊的样式选择器\t213
| 18.4.4 把样式加载进组件的几种方式\t213
-
第19章 Angular模板和数据绑定\t216
19.1 模板表达式\t216
| 19.1.1 模板表达式上下文\t217
| 19.1.2 编写模板表达式的最佳实践\t217
| 19.1.3 管道操作符\t218
| 19.1.4 安全导航操作符和空属性路径\t218
| 19.1.5 非空断言操作符\t218
19.2 模板语句\t219
19.3 数据绑定\t220
| 19.3.1 从数据源到视图\t220
| 19.3.2 从视图到数据源\t220
| 19.3.3 双向绑定\t221
19.4 属性绑定\t221
| 19.4.1 单向输入\t221
| 19.4.2 绑定目标\t221
| 19.4.3 一次性字符串初始化\t221
| 19.4.4 选择“插值表达式”还是“属性绑定”\t222
| 19.5 事件绑定\t222
| 19.5.1 目标事件\t222
| 19.5.2 $event和事件处理语句\t222
| 19.5.3 使用EventEmitter类自定义事件\t223
-
第20章 Angular指令――组件行为改变器\t225
20.1 指令类型\t225
20.2 属性型指令\t225
| 20.2.1 了解NgClass、NgStyle、NgModel指令\t226
| 20.2.2 【实例50】创建并使用属性型指令\t227
| 20.2.3 【实例51】响应用户引发的事件\t228
| 20.2.4 【实例52】使用@Input数据绑定向指令传递值\t229
| 20.2.5 【实例53】绑定多个属性\t231
20.3 结构型指令\t232
| 20.3.1 了解NgIf指令\t232
| 20.3.2 了解NgSwitch指令\t232
| 20.3.3 了解NgFor指令\t233
| 20.3.4 了解<ng-template>标签\t234
| 20.3.5 了解<ng-container>标签\t234
| 20.3.6 【实例54】自定义结构型指令\t235
-
第21章 Angular服务与依赖注入\t238
21.1 初识依赖注入\t238
21.2 在Angular中实现依赖注入\t239
| 21.2.1 观察初始的应用\t240
| 21.2.2 创建服务\t242
| 21.2.3 理解注入器\t242
| 21.2.4 理解服务提供商\t245
| 21.2.5 注入服务\t249
| 21.2.6 单例服务\t250
| 21.2.7 组件的子注入器\t250
| 21.2.8 测试组件\t250
| 21.2.9 服务依赖服务\t251
| 21.2.10 依赖注入令牌\t252
| 21.2.11 可选依赖\t252
21.3 多级依赖注入\t252
| 21.3.1 注入器树\t252
| 21.3.2 注入器冒泡\t253
| 21.3.3 在不同层级提供同一个服务\t253
| 21.3.4 组件注入器\t253
-
第22章 Angular路由\t254
22.1 配置路由\t254
| 22.1.1 【实例55】配置路由器\t254
| 22.1.2 输出导航生命周期中的事件\t256
| 22.1.3 【实例56】设置路由出口\t256
22.2 理解路由器链接\t257
| 22.2.1 路由器状态\t257
| 22.2.2 激活的路由\t257
22.3 路由事件\t258
22.4 重定向URL\t258
22.5 【实例57】一个路由器的例子\t259
| 22.5.1 创建应用及组件\t259
| 22.5.2 修改组件的模板\t260
| 22.5.3 导入并设置路由器\t260
| 22.5.4 添加路由出口\t261
| 22.5.5 美化界面\t262
| 22.5.6 定义通配符路由\t264
-
第23章 Angular响应式编程\t266
23.1 了解Observable机制\t266
| 23.1.1 Observable的基本概念\t266
| 23.1.2 定义观察者\t267
| 23.1.3 执行订阅\t268
| 23.1.4 创建Observable对象\t269
| 23.1.5 实现多播\t270
| 23.1.6 处理错误\t273
23.2 了解RxJS技术\t273
| 23.2.1 创建Observable对象的函数\t274
| 23.2.2 了解操作符\t275
| 23.2.3 处理错误\t276
23.3 了解Angular中的Observable\t277
| 23.3.1 在EventEmitter类上的应用\t278
| 23.3.2 在调用HTTP方法时的应用\t278
| 23.3.3 在AsyncPipe管道上的应用\t279
| 23.3.4 在Router路由器上的应用\t279
| 23.3.5 在响应式表单上的应用\t280
-
第24章 Angular HTTP客户端\t282
24.1 初识HttpClient\t282
24.2 认识网络资源\t282
24.3 【实例58】获取天气数据\t284
| 24.3.1 导入HttpClient\t284
| 24.3.2 编写空气质量组件\t285
| 24.3.3 编写空气质量服务\t285
| 24.3.4 将服务注入组件\t286
| 24.3.5 返回带类型检查的响应\t288
| 24.3.6 读取完整的响应体\t288
24.4 错误处理\t290
| 24.4.1 获取错误详情\t291
| 24.4.2 重试\t292
-
====第6篇 综合应用――构建一个完整的互联网应用
-
第25章 总体设计\t294
25.1 应用概述\t294
| 25.1.1 mean-news的核心功能\t295
| 25.1.2 初始化数据库\t295
25.2 模型设计\t295
| 25.2.1 用户模型设计\t295
| 25.2.2 新闻模型设计\t296
25.3 接口设计\t296
25.4 权限管理\t296
-
第26章 客户端应用\t298
26.1 UI设计\t298
| 26.1.1 首页UI设计\t298
| 26.1.2 新闻详情页UI设计\t299
26.2 实现UI原型\t299
| 26.2.1 初始化mean-news-ui\t300
| 26.2.2 添加NG-ZORRO\t300
| 26.2.3 创建新闻列表组件\t303
| 26.2.4 设计新闻列表原型\t304
| 26.2.5 设计新闻详情页原型\t306
26.3 实现路由器\t309
| 26.3.1 创建路由\t309
| 26.3.2 添加路由出口\t309
| 26.3.3 修改新闻列表组件\t309
| 26.3.4 给“返回”按钮添加事件\t310
| 26.3.5 运行应用\t311
-
第27章 服务器端应用\t312
27.1 初始化服务器端应用\t312
| 27.1.1 创建应用目录\t312
| 27.1.2 初始化应用结构\t312
| 27.1.3 在应用中安装Express\t313
| 27.1.4 编写“Hello World”应用\t314
| 27.1.5 运行“Hello World”应用\t314
27.2 初步实现用户登录认证功能\t314
| 27.2.1 创建服务器端管理组件\t314
| 27.2.2 添加组件到路由器\t315
| 27.2.3 使用HttpClient\t315
| 27.2.4 访问服务器端接口\t316
| 27.2.5 给服务器端接口设置安全认证\t318
27.3 实现新闻编辑器\t320
| 27.3.1 集成ngx-Markdown插件\t320
| 27.3.2 导入MarkdownModule模块\t321
| 27.3.3 编写编辑器界面\t321
| 27.3.4 在服务器端新增创建新闻的接口\t325
| 27.3.5 运行应用\t327
27.4 实现新闻列表展示\t328
| 27.4.1 在服务器端实现新闻列表查询的接口\t328
| 27.4.2 在客户端实现客户端访问新闻列表的REST接口\t329
| 27.4.3 运行应用\t330
27.5 实现新闻详情展示\t331
| 27.5.1 在服务器端实现新闻详情查询的接口\t331
| 27.5.2 在客户端实现调用新闻详情页的REST接口\t333
| 27.5.3 设置路由\t334
| 27.5.4 运行应用\t334
27.6 实现认证信息的存储及读取\t335
| 27.6.1 实现认证信息的存储\t335
| 27.6.2 实现认证信息的读取\t336
| 27.6.3 改造认证方法\t336
| 27.6.4 改造对外的接口\t337
27.7 总结\t339
-
第28章 用NGINX实现高可用\t340
28.1 NGINX概述\t340
| 28.1.1 NGINX特性\t340
| 28.1.2 安装、运行NGINX\t340
| 28.1.3 验证安装\t343
| 28.1.4 常用命令\t344
28.2 部署客户端应用\t345
| 28.2.1 编译客户端应用\t345
| 28.2.2 部署客户端应用的编译文件\t346
| 28.2.3 配置NGINX\t346
28.3 实现负载均衡及高可用\t347
| 28.3.1 配置负载均衡\t348
| 28.3.2 负载均衡常用算法\t349
| 28.3.3 实现服务器端服务器的高可用\t350
| 28.3.4 运行应用\t351
参考文献 \t353
猜您喜欢

读书导航