关于我们
![]() ![]() |
MongoDB+Express+Angular+Node.js全栈开发实战派 定 价:¥109 中 教 价:¥74.12 (6.80折) 库 存 数: 0
以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架构概述 2 1.1 MEAN架构核心技术栈的组成 2 | 1.1.1 MongoDB 2 | 1.1.2 Express 3 | 1.1.3 Angular 3 | 1.1.4 Node.js 3 1.2 MEAN架构周边技术栈的组成 4 | 1.2.1 NG-ZORRO 4 | 1.2.2 ngx-Markdown 4 | 1.2.3 NGINX 5 | 1.2.4 basic-auth 5 1.3 MEAN架构的优势 5 1.4 开发工具的选择 8 - ====第2篇 Node.js——全栈开发平台 - 第2章 Node.js基础 10 2.1 Node.js简介 10 | 2.1.1 Node.js简史 10 | 2.1.2 为什么叫Node.js 12 2.2 Node.js的特点 13 2.3 安装Node.js 17 | 2.3.1 安装Node.js和NPM 17 | 2.3.2 Node.js与NPM的关系 17 | 2.3.3 安装NPM镜像 18 2.4 第1个Node.js应用 18 | 2.4.1 【实例1】创建Node.js应用 18 | 2.4.2 【实例2】运行Node.js应用 18 | 2.4.3 总结 19 - 第3章 Node.js模块——大型项目管理之道 20 3.1 理解模块化机制 20 | 3.1.1 理解CommonJS规范 20 | 3.1.2 理解ES 6模块 22 | 3.1.3 CommonJS和ES 6模块的异同点 24 | 3.1.4 Node.js的模块实现 25 3.2 使用NPM管理模块 26 | 3.2.1 用npm命令安装模块 27 | 3.2.2 全局安装与本地安装 27 | 3.2.3 查看安装信息 28 | 3.2.4 卸载模块 28 | 3.2.5 更新模块 29 | 3.2.6 搜索模块 29 | 3.2.7 创建模块 29 3.3 Node.js的核心模块 29 - 第4章 Node.js测试 31 4.1 严格模式和遗留模式 31 4.2 【实例3】断言的使用 32 4.3 了解AssertionError 33 4.4 【实例4】使用deepStrictEqual 34 - 第5章 Node.js缓冲区——高性能I/O处理的秘诀 38 5.1 了解Buffer类 38 | 5.1.1 TypedArray对象 39 | 5.1.2 Buffer类 39 5.2 创建缓冲区 40 | 5.2.1 初始化缓冲区的API 41 | 5.2.2 理解数据的安全性 41 | 5.2.3 启用零填充 42 | 5.2.4 指定字符编码 43 5.3 切分缓冲区 43 5.4 链接缓冲区 45 5.5 比较缓冲区 46 5.6 缓冲区编/解码 46 | 5.6.1 解码器和编码器 47 | 5.6.2 缓冲区解码 47 | 5.6.3 缓冲区编码 48 - 第6章 Node.js事件处理 50 6.1 理解事件和回调 50 | 6.1.1 事件循环 51 | 6.1.2 事件驱动 51 6.2 事件发射器 52 | 6.2.1 将参数传给监听器 52 | 6.2.2 异步与同步 53 | 6.2.3 仅处理事件一次 53 6.3 事件类型 54 | 6.3.1 事件类型的定义 54 | 6.3.2 内置的事件类型 55 | 6.3.3 error事件 55 6.4 事件的操作 57 | 6.4.1 【实例5】设置最大监听器 58 | 6.4.2 【实例6】获取已注册事件的名称 58 | 6.4.3 【实例7】获取监听器数组的副本 59 | 6.4.4 【实例8】将事件监听器添加到监听器数组的开头 59 | 6.4.5 【实例9】移除监听器 60 - 第7章 Node.js文件处理 63 7.1 了解fs模块 63 | 7.1.1 同步与异步操作文件 63 | 7.1.2 文件描述符 65 7.2 处理文件路径 66 | 7.2.1 字符串形式的路径 66 | 7.2.2 Buffer形式的路径 67 | 7.2.3 URL对象的路径 68 7.3 打开文件 69 | 7.3.1 文件系统标志 69 | 7.3.2 【实例10】打开文件的例子 71 7.4 读取文件 72 | 7.4.1 【实例11】用fs.read()方法读取文件 72 | 7.4.2 【实例12】用fs.readdir()方法读取文件 73 | 7.4.3 【实例13】用fs.readFile()方法读取文件 74 7.5 写入文件 75 | 7.5.1 【实例14】将Buffer写入文件 75 | 7.5.2 【实例15】将字符串写入文件 77 | 7.5.3 【实例16】将数据写入文件 78 - 第8章 Node.js HTTP编程 80 8.1 创建HTTP服务器 80 | 8.1.1 【实例17】用http.Server创建服务器 80 | 8.1.2 理解http.Server事件的用法 81 8.2 处理HTTP的常用操作 83 8.3 请求对象和响应对象 84 | 8.3.1 理解http.ClientRequest类 84 | 8.3.2 理解http.ServerResponse类 88 8.4 REST概述 91 | 8.4.1 REST的定义 92 | 8.4.2 REST的设计原则 92 8.5 成熟度模型 94 | 8.5.1 第0级:用HTTP作为传输方式 94 | 8.5.2 第1级:引入了资源的概念 96 | 8.5.3 第2级:根据语义使用HTTP动词 97 | 8.5.4 第3级:使用HATEOAS 98 8.6 【实例18】构建REST服务的例子 100 | 8.6.1 新增用户 101 | 8.6.2 修改用户 102 | 8.6.3 删除用户 103 | 8.6.4 响应请求 104 | 8.6.5 运行应用 105 - ====第3篇 Express——Web服务器 - 第9章 Express基础 110 9.1 安装Express 110 9.2 【实例19】编写“Hello World”应用 112 9.3 【实例20】运行“Hello World”应用 112 - 第10章 Express路由——页面的导航员 114 10.1 路由方法 114 10.2 路由路径 115 | 10.2.1 【实例21】基于字符串的路由路径 116 | 10.2.2 【实例22】基于字符串模式的路由路径 116 | 10.2.3 【实例23】基于正则表达式的路由路径 117 10.3 路由参数 117 10.4 路由处理器 118 | 10.4.1 【实例24】单个回调函数 118 | 10.4.2 【实例25】多个回调函数 118 | 10.4.3 【实例26】一组回调函数 118 | 10.4.4 【实例27】独立函数和函数数组的组合 119 10.5 响应方法 119 10.6 【实例28】基于Express构建REST API 120 10.7 测试Express的REST API 122 | 10.7.1 测试用于创建用户的API 122 | 10.7.2 测试用于删除用户的API 122 | 10.7.3 测试用于修改用户的API 123 | 10.7.4 测试用于查询用户的API 124 - 第11章 Express错误处理器 125 11.1 捕获错误 125 11.2 默认错误处理器 127 11.3 自定义错误处理器 128 - ====第4篇 MongoDB篇——NoSQL数据库 - 第12章 MongoDB基础 132 12.1 MongoDB简介 132 12.2 安装MongoDB 133 12.3 启动MongoDB服务 134 12.4 链接MongoDB服务器 135 - 第13章 MongoDB的常用操作 136 13.1 显示已有的数据库 136 13.2 创建、使用数据库 136 13.3 插入文档 137 | 13.3.1 【实例29】插入单个文档 137 | 13.3.2 【实例30】插入多个文档 138 13.4 查询文档 139 | 13.4.1 嵌套文档查询 139 | 13.4.2 嵌套字段查询 139 | 13.4.3 使用查询运算符 140 | 13.4.4 多条件查询 140 13.5 修改文档 140 | 13.5.1 修改单个文档 141 | 13.5.2 修改多个文档 141 | 13.5.3 替换单个文档 142 13.6 删除文档 142 | 13.6.1 删除单个文档 143 | 13.6.2 删除多个文档 143 - 第14章 【实例31】使用Node.js操作MongoDB 144 14.1 安装mongodb模块 144 14.2 访问MongoDB 145 14.3 运行应用 146 - 第15章 mongodb模块的综合应用 148 15.1 【实例32】建立连接 148 15.2 【实例33】插入文档 149 15.3 【实例34】查找文档 150 15.4 修改文档 152 | 15.4.1 【实例35】修改单个文档 153 | 15.4.2 【实例36】修改多个文档 157 15.5 删除文档 158 | 15.5.1 【实例37】删除单个文档 158 | 15.5.2 【实例38】删除多个文档 159 - ====第5篇 Angular——前端应用开发平台 - 第16章 Angular基础 162 16.1 常见的UI编程框架 162 | 16.1.1 Angular与jQuery的不同 162 | 16.1.2 Angular与React、Vue.js优势对比 164 | 16.1.3 Angular、React、Vue.js三者怎么选 165 16.2 Angular的安装 165 16.3 Angular CLI的常用操作 166 | 16.3.1 获取帮助 166 | 16.3.2 创建应用 167 | 16.3.3 创建组件 167 | 16.3.4 创建服务 167 | 16.3.5 启动应用 167 | 16.3.6 添加依赖 167 | 16.3.7 升级依赖 167 16.3.8 自动化测试 167 | 16.3.9 下载依赖 168 | 16.3.10 编译 168 16.4 Angular架构概览 168 | 16.4.1 模块 169 | 16.4.2 组件 170 | 16.4.3 模板、指令和数据绑定 170 | 16.4.4 服务与依赖注入 170 | 16.4.5 路由 170 16.5 【实例39】创建第1个Angular应用 171 | 16.5.1 使用Angular CLI初始化应用 171 | 16.5.2 运行Angular应用 173 | 16.5.3 了解src文件夹 174 | 16.5.4 了解根目录 175 - 第17章 Angular模块——大型前端应用管理之道 178 17.1 模块概述 178 | 17.1.1 什么是模块化 178 | 17.1.2 认识基本模块 179 | 17.1.3 认识特性模块 180 17.2 引导启动 180 | 17.2.1 了解declarations数组 181 | 17.2.2 了解imports数组 182 | 17.2.3 了解providers数组 182 | 17.2.4 了解bootstrap数组 182 17.3 常用模块 182 | 17.3.1 常用模块 182 | 17.3.2 BrowserModule和CommonModule 183 17.4 特性模块 183 | 17.4.1 领域特性模块 183 | 17.4.2 带路由的特性模块 184 | 17.4.3 路由模块 184 | 17.4.4 服务特性模块 184 | 17.4.5 可视部件特性模块 185 17.5 入口组件 185 | 17.5.1 引导用的入口组件 185 | 17.5.2 路由用的入口组件 186 | 17.5.3 entryComponents 186 | 17.5.4 编译优化 186 - 第18章 Angular组件——独立的开发单元 187 18.1 数据展示 187 | 18.1.1 【实例40】数据展示的例子 187 | 18.1.2 使用插值表达式显示组件属性 189 | 18.1.3 组件关联模板的两种方式 189 | 18.1.4 在模板中使用指令 190 18.2 生命周期 190 | 18.2.1 生命周期钩子 190 | 18.2.2 【实例41】生命周期钩子的例子 191 | 18.2.3 生命周期钩子的顺序 193 | 18.2.4 了解OnInit()钩子 194 | 18.2.5 了解OnDestroy()钩子 195 | 18.2.6 了解OnChanges()钩子 196 | 18.2.7 了解DoCheck()钩子 196 | 18.2.8 了解AfterView钩子 197 | 18.2.9 了解AfterContent钩子 197 18.3 组件的交互方式 197 | 18.3.1 【实例42】通过@Input把数据从父组件传到子组件 197 | 18.3.2 【实例43】通过set()方法截听输入属性值的变化 199 | 18.3.3 【实例44】通过ngOnChanges()方法截听输入属性值的变化 200 | 18.3.4 【实例45】用父组件监听子组件的事件 202 | 18.3.5 【实例46】父组件与子组件通过本地变量进行交互 204 | 18.3.6 【实例47】父组件调用@ViewChild()方法获取子组件的值 206 | 18.3.7 【实例48】父组件和子组件通过服务来通信 207 18.4 样式 210 | 18.4.1 【实例49】使用组件样式的例子 211 | 18.4.2 样式的作用域 211 | 18.4.3 特殊的样式选择器 213 | 18.4.4 把样式加载进组件的几种方式 213 - 第19章 Angular模板和数据绑定 216 19.1 模板表达式 216 | 19.1.1 模板表达式上下文 217 | 19.1.2 编写模板表达式的最佳实践 217 | 19.1.3 管道操作符 218 | 19.1.4 安全导航操作符和空属性路径 218 | 19.1.5 非空断言操作符 218 19.2 模板语句 219 19.3 数据绑定 220 | 19.3.1 从数据源到视图 220 | 19.3.2 从视图到数据源 220 | 19.3.3 双向绑定 221 19.4 属性绑定 221 | 19.4.1 单向输入 221 | 19.4.2 绑定目标 221 | 19.4.3 一次性字符串初始化 221 | 19.4.4 选择“插值表达式”还是“属性绑定” 222 | 19.5 事件绑定 222 | 19.5.1 目标事件 222 | 19.5.2 $event和事件处理语句 222 | 19.5.3 使用EventEmitter类自定义事件 223 - 第20章 Angular指令——组件行为改变器 225 20.1 指令类型 225 20.2 属性型指令 225 | 20.2.1 了解NgClass、NgStyle、NgModel指令 226 | 20.2.2 【实例50】创建并使用属性型指令 227 | 20.2.3 【实例51】响应用户引发的事件 228 | 20.2.4 【实例52】使用@Input数据绑定向指令传递值 229 | 20.2.5 【实例53】绑定多个属性 231 20.3 结构型指令 232 | 20.3.1 了解NgIf指令 232 | 20.3.2 了解NgSwitch指令 232 | 20.3.3 了解NgFor指令 233 | 20.3.4 了解<ng-template>标签 234 | 20.3.5 了解<ng-container>标签 234 | 20.3.6 【实例54】自定义结构型指令 235 - 第21章 Angular服务与依赖注入 238 21.1 初识依赖注入 238 21.2 在Angular中实现依赖注入 239 | 21.2.1 观察初始的应用 240 | 21.2.2 创建服务 242 | 21.2.3 理解注入器 242 | 21.2.4 理解服务提供商 245 | 21.2.5 注入服务 249 | 21.2.6 单例服务 250 | 21.2.7 组件的子注入器 250 | 21.2.8 测试组件 250 | 21.2.9 服务依赖服务 251 | 21.2.10 依赖注入令牌 252 | 21.2.11 可选依赖 252 21.3 多级依赖注入 252 | 21.3.1 注入器树 252 | 21.3.2 注入器冒泡 253 | 21.3.3 在不同层级提供同一个服务 253 | 21.3.4 组件注入器 253 - 第22章 Angular路由 254 22.1 配置路由 254 | 22.1.1 【实例55】配置路由器 254 | 22.1.2 输出导航生命周期中的事件 256 | 22.1.3 【实例56】设置路由出口 256 22.2 理解路由器链接 257 | 22.2.1 路由器状态 257 | 22.2.2 激活的路由 257 22.3 路由事件 258 22.4 重定向URL 258 22.5 【实例57】一个路由器的例子 259 | 22.5.1 创建应用及组件 259 | 22.5.2 修改组件的模板 260 | 22.5.3 导入并设置路由器 260 | 22.5.4 添加路由出口 261 | 22.5.5 美化界面 262 | 22.5.6 定义通配符路由 264 - 第23章 Angular响应式编程 266 23.1 了解Observable机制 266 | 23.1.1 Observable的基本概念 266 | 23.1.2 定义观察者 267 | 23.1.3 执行订阅 268 | 23.1.4 创建Observable对象 269 | 23.1.5 实现多播 270 | 23.1.6 处理错误 273 23.2 了解RxJS技术 273 | 23.2.1 创建Observable对象的函数 274 | 23.2.2 了解操作符 275 | 23.2.3 处理错误 276 23.3 了解Angular中的Observable 277 | 23.3.1 在EventEmitter类上的应用 278 | 23.3.2 在调用HTTP方法时的应用 278 | 23.3.3 在AsyncPipe管道上的应用 279 | 23.3.4 在Router路由器上的应用 279 | 23.3.5 在响应式表单上的应用 280 - 第24章 Angular HTTP客户端 282 24.1 初识HttpClient 282 24.2 认识网络资源 282 24.3 【实例58】获取天气数据 284 | 24.3.1 导入HttpClient 284 | 24.3.2 编写空气质量组件 285 | 24.3.3 编写空气质量服务 285 | 24.3.4 将服务注入组件 286 | 24.3.5 返回带类型检查的响应 288 | 24.3.6 读取完整的响应体 288 24.4 错误处理 290 | 24.4.1 获取错误详情 291 | 24.4.2 重试 292 - ====第6篇 综合应用——构建一个完整的互联网应用 - 第25章 总体设计 294 25.1 应用概述 294 | 25.1.1 mean-news的核心功能 295 | 25.1.2 初始化数据库 295 25.2 模型设计 295 | 25.2.1 用户模型设计 295 | 25.2.2 新闻模型设计 296 25.3 接口设计 296 25.4 权限管理 296 - 第26章 客户端应用 298 26.1 UI设计 298 | 26.1.1 首页UI设计 298 | 26.1.2 新闻详情页UI设计 299 26.2 实现UI原型 299 | 26.2.1 初始化mean-news-ui 300 | 26.2.2 添加NG-ZORRO 300 | 26.2.3 创建新闻列表组件 303 | 26.2.4 设计新闻列表原型 304 | 26.2.5 设计新闻详情页原型 306 26.3 实现路由器 309 | 26.3.1 创建路由 309 | 26.3.2 添加路由出口 309 | 26.3.3 修改新闻列表组件 309 | 26.3.4 给“返回”按钮添加事件 310 | 26.3.5 运行应用 311 - 第27章 服务器端应用 312 27.1 初始化服务器端应用 312 | 27.1.1 创建应用目录 312 | 27.1.2 初始化应用结构 312 | 27.1.3 在应用中安装Express 313 | 27.1.4 编写“Hello World”应用 314 | 27.1.5 运行“Hello World”应用 314 27.2 初步实现用户登录认证功能 314 | 27.2.1 创建服务器端管理组件 314 | 27.2.2 添加组件到路由器 315 | 27.2.3 使用HttpClient 315 | 27.2.4 访问服务器端接口 316 | 27.2.5 给服务器端接口设置安全认证 318 27.3 实现新闻编辑器 320 | 27.3.1 集成ngx-Markdown插件 320 | 27.3.2 导入MarkdownModule模块 321 | 27.3.3 编写编辑器界面 321 | 27.3.4 在服务器端新增创建新闻的接口 325 | 27.3.5 运行应用 327 27.4 实现新闻列表展示 328 | 27.4.1 在服务器端实现新闻列表查询的接口 328 | 27.4.2 在客户端实现客户端访问新闻列表的REST接口 329 | 27.4.3 运行应用 330 27.5 实现新闻详情展示 331 | 27.5.1 在服务器端实现新闻详情查询的接口 331 | 27.5.2 在客户端实现调用新闻详情页的REST接口 333 | 27.5.3 设置路由 334 | 27.5.4 运行应用 334 27.6 实现认证信息的存储及读取 335 | 27.6.1 实现认证信息的存储 335 | 27.6.2 实现认证信息的读取 336 | 27.6.3 改造认证方法 336 | 27.6.4 改造对外的接口 337 27.7 总结 339 - 第28章 用NGINX实现高可用 340 28.1 NGINX概述 340 | 28.1.1 NGINX特性 340 | 28.1.2 安装、运行NGINX 340 | 28.1.3 验证安装 343 | 28.1.4 常用命令 344 28.2 部署客户端应用 345 | 28.2.1 编译客户端应用 345 | 28.2.2 部署客户端应用的编译文件 346 | 28.2.3 配置NGINX 346 28.3 实现负载均衡及高可用 347 | 28.3.1 配置负载均衡 348 | 28.3.2 负载均衡常用算法 349 | 28.3.3 实现服务器端服务器的高可用 350 | 28.3.4 运行应用 351 参考文献 353
你还可能感兴趣
我要评论
|