新書推薦:
《
英国简史(刘金源教授作品)
》
售價:HK$
98.6
《
便宜货:廉价商品与美国消费社会的形成
》
售價:HK$
77.3
《
读书是一辈子的事(2024年新版)
》
售價:HK$
77.3
《
乐道文库·什么是秦汉史
》
售價:HK$
80.6
《
汉娜·阿伦特与以赛亚·伯林 : 自由、政治与人性
》
售價:HK$
109.8
《
女性与疯狂(女性主义里程碑式著作,全球售出300万册)
》
售價:HK$
109.8
《
药食同源中药鉴别图典
》
售價:HK$
67.0
《
设计中的比例密码:建筑与室内设计
》
售價:HK$
87.4
編輯推薦:
本书始于对每种技术都提供简洁、清晰的教程,然后迅速转向建立实用的Web应用程序。你将学习如何使用Node.js和MongoDB构建更具可伸缩性的高性能站点,以及如何利用Angular的创新MVC方法构建更有效的页面和应用程序,以及如何综合这三个利器共同实现出色的下一代Web解决方案。
■ 使用Node.js和Express实现高度可伸缩的动态Web服务器
■ 为Web应用程序实现MongoDB数据存储
■ 使用Node.js JavaScript代码访问MongoDB并与之交互
■ 定义扩展HTML语言的自定义Angular指令
■ 用JavaScript构建服务器端Web服务
■ 实现可与Node.js Web服务器交互的客户端服务
■ 构建提供丰富用户互动的动态浏览器视图
■ 为Web应用程序和页面添加经过身份验证的用户账号和嵌套的评论组件
內容簡介:
Node.js是领先的服务器端编程环境,MongoDB是*受欢迎的NoSQL数据库,而Angular是基于MVC的前端开发的领先框架。它们一起提供了一个易于实现的完全集成的Web开发栈,可以让Web程序员创建从服务器到客户端完全以JavaScript构建的高性能站点和应用程序。针对Angular 2,Angular 4和后续版本进行了更新,这个新版本的Node.js,MongoDB和Angular Web Development将展示如何将这三种技术整合到完整的工作解决方案中。它首先介绍每种技术的简明明了的教程,然后快速地开始构建常见的Web应用程序。
關於作者:
Brad Dayley是一名高级软件工程师,在开发企业应用程序及Web界面方面,他拥有超过20年的工作经验。他熟练应用JavaScript和jQuery多年,并是Learning Angular, jQuery and JavaScript Phrasebook和Sams Teach Yourself AngularJS, JavaScript, and jQuery All in One的作者。他曾设计并实现了一大批应用程序和服务从应用服务器到复杂的Web应用程序。Brendan Dayley是一名Web应用程序开发人员,他喜欢学习和实施最新、最好的技术。他是Learning Angular和Sams Teach Yourself AngularJS, JavaScript, and jQuery All in One的合著者。他使用JavaScript、TypeScript和Angular编写了大量的Web应用程序,他正在探索新的Web和移动技术(如增强现实)的功能并研究如何将其用于创新解决方案。Caleb Dayley是一名在校大学生,主修计算机科学。他尽可能地学习自己所能学到的东西,并且自学了很多关于程序设计的知识。他自学了几种语言,包括JavaScript、C#,并且使用了本书的第1版。他对未来的发展,以及为有机会帮助设计和开发下一代创新软件感到兴奋,这些软件将继续改善我们生活、工作和娱乐的方式。
译者卢涛:ITPUB社区版主,20年IT从业经历,先后从事cc 软件开发、系统分析及Oracle数据库等工作,参加过多个全国性普查数据处理项目的开发和运维,目前主要从事统计报表联网填报系统的后台支持。《剑破冰山Oracle开发的艺术》作者之一,译有多部技术书籍。
目錄 :
目 录
引 言1
第1 部分 入 门
第1 章 介绍Node.js-to-Angular 套件9
1.1 了解基本的Web 开发框架9
1.1.1 用户10
1.1.2 浏览器10
1.1.3 Web 服务器12
1.1.4 后端服务12
1.2 了解Node.js-to-Angular 套件组件13
1.2.1 Node.js13
1.2.2 MongoDB14
1.2.3 Express15
1.2.4 Angular15
1.3 小结16
1.4 下一章16
第2 章 JavaScript 基础17
2.1 定义变量17
2.2 了解JavaScript 数据类型18
2.3 使用运算符19
2.3.1 算术运算符19
2.3.2 赋值运算符20
VIII 目 录
2.3.3 运用比较和条件运算符20
2.4 实现循环22
2.4.1 while 循环23
2.4.2 dowhile 循环23
2.4.3 for 循环23
2.4.4 forin 循环24
2.4.5 中断循环25
2.5 创建函数26
2.5.1 定义函数26
2.5.2 将变量传递给函数26
2.5.3 从函数返回值 .. 27
2.5.4 使用匿名函数 .. 27
2.6 理解变量作用域 .. 28
2.7 使用JavaScript 对象28
2.7.1 使用对象语法29
2.7.2 创建自定义对象30
2.7.3 使用原型对象模式30
2.8 处理字符串31
2.8.1 合并字符串32
2.8.2 在字符串中搜索子串33
2.8.3 在一个字符串中替换单词33
2.8.4 将字符串分割成数组33
2.9 使用数组33
2.9.1 合并数组35
2.9.2 遍历数组35
2.9.3 将数组转换为字符串35
2.9.4 检查数组是否包含某个条目36
2.9.5 在数组中添加条目和删除条目36
2.10 添加错误处理36
2.10.1 trycatch 块37
2.10.2 抛出你自己的错误37
2.10.3 使用finally38
2.11 小结38
2.12 下一章38
第2 部分 学习Node.js
第3 章 开始使用Node.js41
3.1 了解Node.js41
3.1.1 谁在使用Node.js41
3.1.2 Node.js 的用途42
3.1.3 Node.js 包含的内容42
3.2 Node.js 安装44
3.2.1 纵观Node.js 安装位置44
3.2.2 验证Node.js 可执行文件44
3.2.3 选择Node.js IDE45
3.3 使用Node 包45
3.3.1 什么是Node 封装模块45
3.3.2 了解Node 包注册表46
3.3.3 使用Node 包管理器46
3.3.4 搜索Node 封装模块47
3.3.5 安装Node 封装模块48
3.3.6 使用package.json49
3.4 创建Node.js 应用程序50
3.4.1 创建Node.js 模块封装51
3.4.2 将一个Node.js 封装模块发布到NPM 注册表52
3.4.3 在Node.js 应用程序中使用Node.js 封装模块54
3.5 将数据写入控制台55
3.6 小结56
3.7 下一章56
第4 章 在Node.js 中使用事件、监听器、定时器和回调57
4.1 了解Node.js 事件模型57
4.1.1 比较事件回调和线程模型57
4.1.2 在Node.js 中阻塞IO58
4.1.3 会话示例60
4.2 将工作添加到事件队列60
4.2.1 实现定时器61
4.2.2 使用nextTick 来调度工作64
4.2.3 实现事件发射器和监听器65
4.3 实现回调68
4.3.1 向回调函数传递额外的参数69
4.3.2 在回调中实现闭包70
4.3.3 链式回调71
4.4 小结72
4.5 下一章72
第5 章 在Node.js 中处理数据IO73
5.1 处理JSON73
5.1.1 把JSON 转换成JavaScript 对象73
5.1.2 把JavaScript 对象转换为JSON74
5.2 使用Buffer 模块缓冲数据74
5.2.1 了解缓冲数据75
5.2.2 创建缓冲区75
5.2.3 写入缓冲区76
5.2.4 从缓冲区读取77
5.2.5 确定缓冲区的长度78
5.2.6 复制缓冲区78
5.2.7 对缓冲区切片80
5.2.8 拼接缓冲区80
5.3 使用Stream 模块来传送数据81
5.3.1 Readable 流82
5.3.2 Writable 流84
5.3.3 Duplex 流86
5.3.4 Transform 流88
5.3.5 把Readable 流用管道输送到Writable 流 89
5.4 用Zlib 压缩与解压缩数据91
5.4.1 压缩和解压缩缓冲区91
5.4.2 压缩解压缩流93
5.5 小结93
5.6 下一章93
第6 章 从Node.js 访问文件系统95
6.1 同步和异步文件系统调用95
6.2 打开和关闭文件96
6.3 写入文件97
6.3.1 简单文件写入97
6.3.2 同步文件写入98
6.3.3 异步写入文件99
6.3.4 流式文件写入101
6.4 读取文件102
6.4.1 简单文件读取102
6.4.2 同步文件读取103
6.4.3 异步文件读取104
6.4.4 流式文件读取105
6.5 其他文件系统任务106
6.5.1 验证路径的存在性106
6.5.2 获取文件信息107
6.5.3 列出文件108
6.5.4 删除文件110
6.5.5 截断文件110
6.5.6 建立和删除目录111
6.5.7 重命名文件和目录112
6.5.8 监视文件更改112
6.6 小结 .. 113
6.7 下一章113
第7 章 在Node.js 中实现HTTP 服务115
7.1 处理URL115
7.1.1 了解URL 对象116
7.1.2 解析URL 组件117
7.2 处理查询字符串和表单参数117
7.3 了解请求、响应和服务器对象118
7.3.1 http.ClientRequest 对象118
7.3.2 http.ServerResponse 对象121
7.3.3 http.IncomingMessage 对象122
7.3.4 http.Server 对象122
7.4 在Node.js 中实现HTTP 客户端和服务器124
7.4.1 提供静态文件服务124
7.4.2 实现动态的GET 服务器126
7.4.3 实现POST 服务器128
7.4.4 与外部源交互131
7.5 实现HTTPS 服务器和客户端133
7.5.1 创建HTTPS 客户端134
7.5.2 创建HTTPS 服务器135
7.6 小结 136
7.7 下一章136
第8 章 在Node.js 中实现套接字服务137
8.1 了解网络套接字137
8.2 了解TCP 服务器和Socket 对象138
8.2.1 net.Socket 对象138
8.2.2 net.Server 对象141
8.3 实现TCP 套接字服务器和客户端144
8.3.1 实现TCP 套接字客户端144
8.3.2 实现TCP 套接字服务器146
8.4 实现TLS 服务器和客户端149
8.4.1 创建TLS 套接字客户端150
8.4.2 创建TLS 套接字服务器 151
8.5 小结153
8.6 下一章153
第9 章 在Node.js 中使用多处理器扩展应用程序155
9.1 了解process 模块155
9.1.1 了解进程IO 管道155
9.1.2 了解进程的信号156
9.1.3 使用process 模块控制进程执行156
9.1.4 从process 模块获取信息157
9.2 实现子进程159
9.2.1 了解ChildProcess 对象159
9.2.2 使用exec在另一个进程上执行一个系统命令161
9.2.3 使用execFile在另一个进程上执行一个可执行文件162
9.2.4 使用spawn在另一个Node.js 实例中产生一个进程163
9.2.5 实现子派生165
9.3 实现进程集群167
9.3.1 使用cluster 模块168
9.3.2 了解Worker 对象169
9.3.3 实现一个HTTP 集群170
9.4 小结172
9.5 下一章172
第10 章 使用其他Node.js 模块173
10.1 使用os 模块173
10.2 使用util 模块175
10.2.1 格式化字符串175
10.2.2 检查对象类型176
10.2.3 将JavaScript 对象转换为字符串176
10.2.4 从其他对象继承功能177
10.3 使用dns 模块178
10.4 使用crypto 模块180
10.5 其他Node 模块和对象181
10.6 小结182
10.7 下一章182
第3 部分 学习MongoDB
第11 章 了解NoSQL 和MongoDB185
11.1 为什么要采用NoSQL185
11.2 了解MongoDB186
11.2.1 理解集合186
11.2.2 了解文档186
11.3 MongoDB 的数据类型187
11.4 规划你的数据模型 188
11.4.1 使用文档引用来规范化数据189
11.4.2 使用嵌入式文档反规范化数据190
11.4.3 使用封顶集合191
11.4.4 了解原子写操作192
11.4.5 考虑文件增长192
11.4.6 识别索引、分片和复制的机会193
11.4.7 大集合与大量集合的对比193
11.4.8 决定数据生命周期193
11.4.9 考虑数据的可用性和性能194
11.5 小结194
11.6 下一章194
第12 章 MongoDB 入门195
12.1 构建MongoDB 的环境195
12.1.1 MongoDB 的安装195
12.1.2 启动MongoDB196
12.1.3 停止MongoDB197
12.1.4 从shell 客户端访问MongoDB197
12.2 管理用户账户200
12.2.1 列出用户200
12.2.2 创建用户账户201
12.2.3 删除用户202
12.3 配置访问控制203
12.3.1 创建用户管理员账户203
12.3.2 打开身份验证 . 204
12.3.3 创建数据库管理员账户204
12.4 管理数据库205
12.4.1 显示数据库清单205
12.4.2 切换当前数据库205
12.4.3 创建数据库206
12.4.4 删除数据库206
12.4.5 复制数据库207
12.5 管理集合207
12.5.1 显示数据库中的集合列表207
12.5.2 创建集合208
12.5.3 删除集合208
12.5.4 在集合中查找文档209
12.5.5 将文档添加到集合中210
12.5.6 从集合中删除文档210
12.5.7 更新集合中的文档211
12.6 小结212
12.7 下一章212
第13 章 MongoDB 和Node.js 入门213
13.1 把MongoDB 的驱动程序添加到Node.js213
13.2 从Node.js 连接到MongoDB213
13.2.1 了解写入关注214
13.2.2 通过MongoClient 对象从Node.js 连接到MongoDB .214
13.3 了解用在MongoDB Node.js 驱动程序中的对象218
13.3.1 了解Db 对象218
13.3.2 了解Admin 对象220
13.3.3 了解Collection 对象220
13.3.4 了解Cursor 对象222
13.4 访问和操作数据库 223
13.4.1 列出数据库223
13.4.2 创建数据库223
13.4.3 删除数据库224
13.4.4 创建、列出和删除数据库实例224
13.4.5 获取MongoDB 服务器的状态226
內容試閱 :
译者序
随着互联网的发展,曾几何时,全栈工程师(Full Stack Engineer)的概念开始兴起,这种职位要求应征者对开发堆栈的每个方面都有所掌握,包括服务器、网络及宿主环境、数据建模、业务逻辑、APIActionMVC、用户界面等。过去,这意味着全栈工程师需要面对归属不同层次的多种软件环境和语言,并处理各层之间的交互,这些技术中的任何一种都要耗费大量的精力和时间来学习,因而会面临很大的挑战。现在,这种情况已经改变,JavaScript 语言既可用于客户端开发,又能用于编写服务器端应用程序,还能方便地与传统及新型数据库交互,其中有些代码还能复用,从而为开发功能丰富的互联网应用程序创造了良好的条件。
Node.js 是一种领先的服务器端编程环境,它和Express 的结合能够实现高度可伸缩的动态Web 服务器,并可用JavaScript 编写Web 服务。
MongoDB 是目前最流行的NoSQL 数据库,可用于Web 应用程序数据的存储,并能从Node.js JavaScript 代码访问。
Angular 正迅速成为基于MVC 的前端开发的领先框架,它的自定义指令扩展了HTML语言。
这三者整合在一起使得能够完全用JavaScript 创建从服务器到客户端浏览器的高性能站点和应用程序。
本书提供了将这3 种技术整合成全面的有效解决方案的完整指南。书中简要而清晰地讲述了这3 种技术,然后迅速转到构建几种常见的Web 应用程序上面。最后还用多个实际的例子实现了可以与Node.js Web 服务器交互的客户端服务,为用户提供了丰富的交互功能的动态浏览器视图,以及为Web 页面添加用户身份验证和嵌套评论等组件。
作者Brad Dayley 是一名高级软件工程师,精通jQuery、JavaScript、MongoDB,著有多本技术书籍,并在企业应用程序及Web 界面方面具有丰富的开发经验,本书正是他对实际工作成果的总结。第2 版增加了两位作者:Brendan Dayley 是经验丰富的技术书籍作家和Web 软件工程师;Caleb Dayley 则是计算机科学专业的大学生,他对于设计和开发下一代创新软件很有兴趣。
通过学习本书,读者将学会如何使用Node.js 和MongoDB 来建立更具可伸缩性的高性能网站,如何利用Angular 创新的MVC 方法构建更有效的网页和应用程序,以及如何把这三者结合在一起使用,从而提供卓越的下一代Web 解决方案。
李绿霞、卢林、陈克非、李洪秋、张慧珍、李又及、卢晓瑶、陈克翠、汤有四、李阳、刘雯也参与了部分翻译工作,感谢他们在本书翻译工作中的辛勤付出。
感谢我们的儿子卢令一,他读小学三年级了,他努力好学,本书的出版也有他的一份贡献。
感谢电子工业出版社张春雨编辑对我们的信任,让我们继续从事第2 版的翻译工作。
最后,希望这本书能对读者有所助益。但由于译者经验和水平有限,译文中难免有不妥之处,恳请读者批评指正!
卢涛 李颖
2018 年9月18 日
引言
欢迎阅读本书。本书将引领你进入使用JavaScript 的世界在你的Web 开发项目中,从服务器和服务到浏览器客户端。本书涵盖Node.js、MongoDB 和Angular 的实现和集成,而它们是Web 开发世界中新兴的一些最令人兴奋和创新的技术。
本篇引言包括
? 本书受众;
? 为什么要阅读本书;
? 从本书中你将了解到的知识;
? Node.js、MongoDB 和Angular 分别是什么,以及为什么它们都是出色的技术;
? 本书的组织结构。
让我们开始吧。
本书受众
本书假定读者已经对HTML 的基础知识有所了解,并可以用现代编程语言完成一些编程。读者如果对JavaScript 有一定了解,将更容易理解本书的内容;但这不是必需的,因为本书确实也涵盖了JavaScript 的基础知识。
为什么要阅读本书
本书将教你如何创建功能强大的互动网站和Web 应用程序从Web 服务器和服务器上的服务到基于浏览器的交互式Web 应用程序。这里所涉及的技术都是开源的,在服务器端组件和浏览器端组件上你都可以使用JavaScript。
本书的大多数读者想要掌握Node.js 和MongoDB,以便可以达到构建高度可伸缩和高性能网站的目的。大多数读者也想利用Angular 创新的MVCMVVM(Model-View-ControllerModel-View-View-Model)方法来实现精心设计和结构化的网页和Web 应用程序。总之,Node.js、MongoDB 和Angular 提供了一个易于实现并完全集成的Web 开发套件,它可以让你实现神奇的Web 应用程序。
从本书中你将了解到的知识
阅读本书将帮助你构建现实中的动态网站和Web 应用程序。网站不再由HTML 页面和集成的图像及格式化的文本等简单的静态内容构成。相反,网站变得更加动态,单个网页往往充当一个完整的网站或应用程序。
使用Angular 技术,可让你在网页中构建逻辑,这可以与Node.js 服务器相互通信并从MongoDB 数据库获取必要的数据。Node.js、MongoDB 和Angular 的组合可以让你实现交互式动态网页。通过阅读本书,你将学会如下的事情:
? 如何使用Node.js 和Express 来实现一个高度可伸缩的动态Web 服务器;
? 如何在JavaScript 中创建服务器端的Web 服务;
? 如何在Web 应用程序中实现MongoDB 的数据存储;
? 如何用Node.js JavaScript 代码实现对MongoDB 的访问和交互;
? 如何定义静态和动态Web 路由并实现服务器端脚本来支持它们;
? 如何定义扩展HTML 语言的自定义Angular 组件;
? 如何实现可以与Node.js Web 服务器交互的客户端服务;
? 如何建立提供丰富的用户交互的动态浏览器视图;
? 如何将嵌套的组件添加到网页;
? 如何实现Angular 路由来管理客户端应用视图之间的转移。
何为Node.js
Node.js,有时被直接称作Node,是基于谷歌的V8 JavaScript 引擎的开发框架。你可以用JavaScript 编写Node.js 代码,然后V8 将它编译为要执行的机器代码。你可以用Node.js编写出大部分,或者甚至全部的服务器端代码,包括Web 服务器、服务器端脚本和任何支持Web 应用程序的功能。Web 服务器和支持Web 应用程序的脚本在同一个服务器端应用程序中运行这一事实,允许在Web 服务器和脚本之间有更紧密的集成。
Node.js 之所以是一个出色的框架,基于下面几个原因。
? JavaScript 端到端:Node.js 的一个最大优点是,它可以让你用JavaScript 同时编写服务器端和客户端脚本。在决定把逻辑放入客户端脚本还是服务器端脚本方面一直有困难。利用Node.js,你可以在客户端上编写JavaScript,并轻松地在服务器上适应它,反之亦然。另外一个好处是,客户端的开发者和服务器的开发者使用同一种语言。
? 事件驱动的可伸缩性:Node.js 应用独特的逻辑来处理Web 请求。使用Node.js,不是让多个线程等待处理Web 请求,而是采用一种基本的事件模型在同一个线程上处理它们。这使得Node.js Web 服务器可以用传统的Web 服务器不能做到的方式扩缩。
? 可扩展性:Node.js 有很多的追随者和一个活跃的开发社区。人们正在不断提供新的模块来扩展Node.js 的功能。此外,在Node.js 中易于安装和包含新的模块,你可以在几分钟内扩展Node.js 的项目来包含新的功能。
? 快速执行:建立Node.js,并在其中开发是超级容易的。在短短几分钟内就可以安装Node.js,并拥有一个能工作的Web 服务器。
何为MongoDB
MongoDB 是一个灵活的可伸缩的NoSQL 数据库。Mongo 这个名字来自单词堆积如山(humongous),用来强调MongoDB 提供的可伸缩性和性能。MongoDB 为需要存储诸如用户评论、博客或其他条目数据的高流量的网站提供了出色的网站后端存储,因为它可快速伸缩并易于实现。
下面是MongoDB 真正适合于Node.js 套件的一些原因。
? 针对文档:因为MongoDB 是针对文档的,所以数据在数据库中存储的格式,非常接近于你在服务器端和客户端脚本中处理它们的格式。这消除了把数据从行转换为对象和转换回来的需要。
? 高性能:MongoDB 是目前性能最高的数据库之一。尤其是在现在,有越来越多的人与网站进行交互,具有能够支持大流量的后端是很重要的。
? 高可用性:MongoDB 的复制模型使得它易于维护可伸缩性,同时又保持高性能。
? 高可伸缩性:MongoDB 的结构使得它易于通过在多个服务器上对数据共享实现水平伸缩。
? 无SQL 注入:MongoDB 是不容易受到SQL 注入攻击的(也就是向Web 表单或从浏览器的其他输入中输入SQL 语句,从而危及数据库的安全性)。这是因为对象被存储为对象,不使用SQL 字符串。
何为Angular
Angular 是由谷歌开发的JavaScript 客户端框架。Angular 背后的理论是提供一个框架,以便可以很容易地使用MVCMVVM 框架实现设计良好的结构化网页和应用程序。
Angular 提供了在浏览器中处理用户输入、操纵客户端上的数据及控制元素如何在浏览器界面上显示的功能。下面是Angular 具有的一些优势。
? 数据绑定:Angular 利用其强大的范围机制,有一个将数据绑定到HTML 元素的简洁的方法。
? 可扩展性:Angular 架构允许你轻松地扩展语言的各个方面,以提供你自己的自定义实现。