Node.js 实战.pdf

Node.js 实战.pdf
 

书籍描述

内容简介
《Node.js 实战(双色)》通过8 个实例讲解了Node.js 在实战开发中的应用,涉及Node.js 常用框架、非关系型数据库、关系型数据库、运维命令和网络安全等内容。章节按照从简单到复杂的难度排序,每一章都通过一个有趣的实例指引读者从头开发一个应用,让读者可以循序渐进地学习Node.js,以及在实战开发中的编程技巧。
《Node.js 实战(双色)》面向的是有一定Node.js 基础的读者,建议读者把本书当作入门书和进阶书之间的过渡书籍来阅读。当然,《Node.js 实战(双色)》也适合那些有其他服务器编程语言基础,并且想尝试Node.js 新鲜技术的人阅读。

编辑推荐
因为CNode社区点击率颇高、粉丝数万的《一起学node.js》,我认识了《Node.js实战》这本书的几位作者,他们在CNode社区内的贡献、与粉丝跟帖及回复频率,文章更新速度,让我确定了与其合作的想法。很高兴,《Node.js实战》没有成为教条式的入门级别,而是跳出Node.js入门的圈子,真正进入Node.js实战层次。《Node.js实战》的内容架构也是由简入难的,Node.js入门级读者也可从中得到灵感。对《Node.js实战》的内容用6个字可以总结:让人大呼过瘾!废话不多说了,目录就在下方,赶快看吧,绝对物超所值。

媒体推荐
本书中的实例涵盖了Node.js开发的各个部分,大到项目架构创建、小到每一次I/O操作,在本书中都有详细的介绍。请阅读本书,将你的想法运行在你的Node进程上。
——袁锋(@Python发烧友)
某网数据产品部资深Web开发工程师,CNode.org社区核心成员
如果你想用Node.js快速开发一个个人博客;如果你想用Node.js做一个爬虫程序,定时获取你想要的东西;如果你想用Node.js打造实时Web应用;如果你想让Node.js支持多线程;如果你想在npm上发布一个自己的package;如果你想让自己的Node.js站点更加安全;那么,你就需要拥有这本《Node.js实战》,本书对这些内容有详尽的实例供您参考。
——田永强(@朴灵)
就职于某网站数据平台,Node.js布道师,《深入浅出Node.js》作者
无论是国家还是我们个人,都必须关注安全问题;同样,互联网安全也与每个互联网开发人员休戚相关。这本书介绍了使用Node.js开发Web应用可能面临的安全问题,以及抵御一些常规恶意攻击的各种防御措施,并搭建了一个安全的Web站点,其内容让人印象深刻。
——谢骋超(@圈圈套圈圈)
网易Pomelo开源分布式网络游戏框架总负责人
本书是我看过的最贴近实战开发的Node.js书籍之一,虽然它由4位作者合力完成,写作风格难免有所不同,但是通读本书后,4位作者带来的精彩章节却让我大呼过瘾,有继续阅读下去的强烈欲望。感谢4位作者为我们这些Node.js爱好者带来了这本充满经验和知识的《Node.js实战》。
——张轩丞(某网花名朋春)
就职于某网站数据平台
曾主导开发的ITier(标准数据中间层)、MyFox(分布式MySQL集群代理层)

作者简介
赵坤,现于北京红树岛科技有限公司实习,热爱互联网,崇尚开源精神。2013年偶遇Node.js,相见恨晚,从此开始一条Node.js不归路。
寸志,毕业于同济大学信息安全专业,现任Teambition前端工程师;《深入浅出CoffeeScript》译者。
雷宗民,某外贸公司PHP码农,2011年6月开始接触Node.js,从此开始各种折腾与重复造轮子。
吴中骅,目前就职于苏州唐人数码科技有限公司,主要负责公司用户中心、充值平台的开发,API平台开发以及APP游戏研发。

目录
第1章 使用Express + MongoDB搭建多人博客.................. 1
1.1 一个简单的博客.......................... 2
1.1.1 学习环境......................... 2
1.1.2 快速开始......................... 2
1.1.3 路由控制......................... 7
1.1.4 模板引擎....................... 11
1.1.5 搭建多人博客............... 13
1.1.6 使用数据库................... 17
1.1.7 注册和登录................... 21
1.1.8 发表文章....................... 35
1.2 使用Markdown............................... 40
1.3 增加文件上传功能.................... 42
1.4 实现用户页面和文章页面................... 45
1.5 增加编辑与删除功能................ 49
1.6 实现留言功能............................ 54
1.7 实现分页功能............................ 57
1.8 增加存档页面............................ 60
1.9 增加标签和标签页面................ 62
1.10 增加pv统计和留言统计..................... 68
1.11 增加文章检索功能....................... 70
1.12 增加友情链接......................... 72
1.13 增加404页面........................... 73
1.14 增加用户头像......................... 74
1.15 增加转载功能和转载统计............ 77
1.16 增加日志功能......................... 84
1.17 小结......................................... 85
第2章 使用Express+MongoDB搭建多人博客番外篇.................... 87
2.1 番外篇之一——使用Passport....................... 88
2.2 番外篇之二——部署到Heroku................................... 91
2.3 番外篇之三——使用Mongoose...................... 95
2.4 番外篇之四——使用Async.......................... 98
2.5 番外篇之五——使用KindEditor.................... 102
2.6 番外篇之六——使用Handlebars................ 105
2.7 番外篇之七——使用KindEditor............. 109
第3章 使用Redis搭建漂流瓶服务器..............................111
3.1 初识Redis.................................. 112
3.2 开始漂流瓶之旅............................. 119
3.3 讨厌的海星................................... 127
3.4 扔回海里......................................... 127
3.5 今天的瓶子已经用完啦.................. 129
3.6 我的瓶子.................................. 131
3.7 女神,我们做朋友吧....................... 134
3.8 部署.......................................... 137
3.9 小结.......................................... 139
3.10 参考文献............................... 139
第4章 使用Meteor搭建微博网站................ 141
4.1 Meteor简介............................. 142
4.2 Meteor的安装与使用................. 142
4.3 快速入门.................................. 145
4.3.1 测试一:客户端和服务器端执行同一段代码............ 156
4.3.2 测试二:响应式............. 156
4.3.3 测试三:insecure包................ 157
4.3.4 测试四:autopublish包.............................. 159
4.3.5 测试五:加载顺序............... 161
4.4 开始搭建微博网站.................................... 161
4.4.1 开发环境............................ 161
4.4.2 学习目标.......................... 162
4.4.3 创建应...................................... 162
4.5 路由功能....................................... 165
4.6 用户注册..................................... 169
4.7 用户登录.................................. 173
4.8 发表微博.................................. 174
4.9 使用Markdown.................................. 176
4.10 部署....................................... 177
4.11 小结....................................... 179
4.12 参考文献.................................. 179
第5章 使用socket.io+Angular打造单页应用.......................... 181
5.1 最简单的聊天室............................ 182
5.1.1 socket.io简介..................... 182
5.1.2 Angular.js................................. 182
5.1.3 开始新建TechNode目录.............. 182
5.1.4 express.js服务器.................... 183
5.1.5 安装Bootstrap和Angular.js........ 185
5.1.6 搭建聊天室......................... 186
5.1.7 开始与好友聊天................ 192
5.2 让用户不再匿名........................... 192
5.2.1 添加登录功能..................... 192
5.2.2 用户登录与认证................ 195
5.2.3 socket.io验证...................... 200
5.2.4 显示用户名和在线用户列表................................. 202
5.2.5 我不喜欢你们................................ 211
5.3 提供不同的房间................................ 211
5.3.1 设计房间列表页面............................. 211
5.3.2 添加房间API.......................... 212
5.3.3 实现room的controller................. 213
5.3.4 提供socket的房间API................ 214
5.3.5 登录后跳转至房间列表.............. 215
5.3.6 房间列表............................. 216
5.3.7 进入单独的房间........................ 219
5.3.8 让消息只在房间内传递................... 224
5.3.9 用户离开房间.......................... 225
5.3.10 坏代码的味道...................... 227
5.4 架构优化与发布....................... 227
5.4.1 项目结构..................... 228
5.4.2 分拆http和socket服务...................... 229
5.4.3 客户端缓存................. 231
5.4.4 使用Grunt打包TechNode..... 236
5.4.5 发布TechNode.................. 242
5.4.6 聊天室之旅结束啦.................. 242
第6章 网络爬虫与数据操作........................... 243
6.1 学习目标.................................. 244
6.2 网络爬虫.................................. 245
6.2.1 相关模块介绍.................. 246
6.2.2 创建网络爬虫前的准备工作................................. 253
6.2.3 获取文章分类列表...................... 254
6.2.4 获取分类下的文章列表............... 257
6.2.5 获取文章的内容.................. 262
6.2.6 获取文章分类下的所有文章................................... 264
6.2.7 将结果保存到数据库中................... 267
6.2.8 保存文章分类............................. 269
6.2.9 一个完整的爬虫实例............... 270
6.3 显示数据库中的数据.............................. 279
6.3.1 相关模块介绍......................... 279
6.3.2 创建Web服务器前的工作........................... 280
6.3.3 查询数据.................................... 281
6.3.4 博客首页.................................. 283
6.3.5 文章页面................................. 285
6.4 自动更新文章数据.................................. 286
6.4.1 相关模块介绍.............................. 287
6.4.2 准备工作........................... 290
6.4.3 定时执行更新任务............................... 290
6.5 让程序更稳定地运行................................. 291
6.5.1 处理uncaughtException事件................................ 291
6.5.2 使用pm2来启动程序.................................. 291
6.5.3 安装pm2........................................... 292
6.5.4 启动和停止程序..................... 292
6.6 处理 GBK 编码的网页.......................... 292
6.7 小结.......................................... 294
6.8 参考文献.................................. 294
第7章 Node.js的进程与线程............................ 295
7.1 Node.js和PHP................................. 296
7.2 单线程的Node.js............................... 298
7.3 单线程的优缺点.......................... 298
7.4 多线程...................................... 300
7.5 多进程...................................... 305
7.6 多进程和多线程使用的比较................ 310
7.7 总结.......................................... 314
7.8 参考文献.................................. 315
第8章 发布一个Package............................ 317
8.1 Node.js包解决的问题...................... 318
8.2 创建package.json............................ 318
8.3 设计package的文件目录..................... 319
8.4 纯js包开发............................... 321
8.5 安装node-gyp......................................... 323
8.6 创建binding.byp............................... 324
8.7 C++插件包开发............................ 324
8.8 包的测试.................................. 330
8.9 跨平台测试................................. 333
8.10 readme.md......................................... 334
8.11 发布到GitHub............................ 334
8.12 发布到npm............................. 334
8.13 状态图标............................... 335
8.14 总结....................................... 336
8.15 参考文献............................... 337
第9章 Web安全实战............................... 339
9.1 什么是Web安全............................ 340
安全的定义和意识........................ 340
9.2 Node.js中的Web安全................ 341
HTTP管道洪水漏洞...................... 341
9.3 SQL注入....................................... 343
9.4 XSS脚本攻击................................ 345
9.5 CSRF请求伪造............................. 350
9.6 应用层DoS拒绝服务................... 358
9.7 文件路径漏洞............................... 366
9.8 加密安全.......................................... 372
9.9 小结.............................................. 375
9.10 参考文献.................................. 375

序言
Node.js自2009年诞生之日起,便受到了广泛的关注,短短几年间便掀起一股Node.js热潮,GitHub上star数已经超过2.7万。Node.js包管理器npm的出现,更是促进了Node.js生态圈的繁荣,目前,npm上已经有6万多的第三方模块,周下载量接近4000万,可见Node.js的热门程度。
本书目的
目前,市面上已经有很多关于Node.js的书籍,有些书籍对Node.js和一些常用框架进行了详细的介绍,可以作为Node.js的入门书籍来阅读;也有些讲得比较深入,用来理解Node.js的内部原理及结构,可以作为进阶书籍来阅读;但是并没有一本完全讲解Node.js实战开发的书籍,而本书的目的就是为了弥补这个空缺。
本书不会从头讲解Node.js是什么,所以面向的是有一定Node.js基础的读者,建议把本书当作入门书和进阶书之间的过渡书籍来阅读。当然,本书也适合那些有其他服务器编程语言基础,并且想尝试Node.js新技术的人阅读。通过阅读本书,读者可以快速地熟悉并使用Node.js进行开发,那么本书的目的就达到了。
本书各章内容
本书以8个实例分别讲解了Node.js的几个不同的应用场景,当然,这只是Node.js应用场景的冰山一角。本书共9章,由4位作者共同编写,其中赵坤(nswbmw)完成了第1、2、3、4章的创作,寸志(island205)完成了第5章的创作,雷宗民(leizongmin)完成了第6章的创作,吴中骅(snoopy)完成了第7、8、9章的创作。
下面是各章的内容介绍。
第1章 使用Express + MongoDB搭建多人博客
这一章将会讲解如何使用Express和MongoDB一步一步地搭建一个完整的博客,读者将会熟悉Express、MongoDB及其基本使用。
第2章 使用Express+MongoDB搭建多人博客番外篇
这一章是第1章《使用Express+MongoDB搭建多人博客》的番外篇。本章通过7个方面来扩展和修改博客。每个番外篇都是独立的,记得做好备份哦。
第3章 使用Redis搭建漂流瓶服务器
这一章将会讲解如何使用Node.js+Redis+MongoDB搭建一个漂流瓶JSON API服务器。通过本章的学习,读者可以学会如何使用Node.js搭建JSON API服务器,以及Redis的基本使用。
第4章 使用Meteor搭建微博网站
这一章我们将会学习一个有关Node.js的热门开发框架——Meteor,通过一个微博实例来学习Meteor的基本使用,以及用它是如何能快速开发网站的。
第5章 使用socket.io + Angular打造单页应用
这一章将会讲解如何使用socket.io和Angular实现一个单页应用(SPA),通过本章的学习,读者将会了解如何把Node.js与前端的开发框架结合起来,体会前端开发流程,快速实现Web应用。
第6章 网络爬虫与数据库操作
这一章将介绍如何使用Node.js获取网页的HTML内容,以及如何从获取的HTML中提取出需要的数据,并将其保存到MySQL数据库中,同时也简单介绍了如何处理GBK编码,以及如何在Node.js中执行定时任务等相关知识。
第7章 Node.js的进程与线程
这一章将介绍Node.js进程和线程的工作机制,这也是本书唯一一个讲解原理比较多的章节,通过学习本章,读者将对Node.js单线程异步的架构有更深入的理解。
第8章 发布一个 Package
这一章将会带领读者从无到有地创建一个让Node.js支持多线程开发的Package,包括对Package的代码部署、接口设计,C++插件、libuv库和Package测试都有详细的介绍,最终将开发好的libuv_thread 包发布到npm上。
第9章 Web安全实战
这一章涵盖了用Node.js进行Web开发可能面临的各种安全漏洞,通过对各种Web攻击实例的分析,让读者对Web安全有更全面和深入的认识。
致谢
首先,感谢电子工业出版社博文视点的张国霞编辑和顾慧芳编辑,在她们热心的帮助和指导下,本书才会得以出版。感谢袁锋(@Python发烧友)、朴灵、谢聘超(@圈圈套圈圈)为本书慷慨作序,还要感谢寸志、雷宗民、吴中骅在百忙之中抽出时间来参与本书的创作,没有他们的呕心沥血,便不会完成此书。当然还有广大 CNode 社区和群里的小伙伴们,是你们的支持让我鼓起勇气写书。最后,献给我的家人和女朋友,我爱你们。

赵坤
2014年3月

文摘
9.1 什么是Web安全
在互联网时代,数据安全与个人隐私受到了前所未有的挑战,我们作为网站开发者,必须让一个Web站点满足基本的安全三要素。
(1)保密性,要求保护数据内容不能泄露,加密是实现保密性的常用手段。
(2)完整性,要求用户获取的数据是完整不被篡改的,我们知道很多oAuth协议要求进行sign签名,就是保证双方数据的完整性。
(3)可用性,保证我们的Web站点是可被访问的,网站功能是正常运营的,常见的DoS(Denail of Service 拒绝服务)攻击就是破坏了可用性这一点。
9.1.1 安全的定义和意识
Web安全的定义根据攻击手段来分,我们把它分为如下两类。
(1)服务安全,确保网络设备的安全运行,提供有效的网络服务。
(2)数据安全,确保在网上传输数据的保密性、完整性和可用性。
我们之后要介绍的SQL注入、XSS攻击等都是属于数据安全的范畴,DoS、Slowlori攻击等都是属于服务安全范畴。
在黑客世界中,用帽子的颜色比喻黑客的“善恶”。精通安全技术、工作在反黑客领域的安全专家我们称之为白帽子,而黑帽子则是利用黑客技术谋取私利的犯罪群体。同样都是搞网络安全研究,黑、白帽子的职责完全不同,甚至可以说是对立的。对于黑帽子而言,他们只要找到系统的一个切入点就可以达到入侵破坏的目的;而白帽子必须将自己系统所有可能被突破的地方都设防,保证系统的安全运行。所以我们在设计架构的时候就应该有安全意识,时刻保持清醒的头脑,可能我们的Web站点100处都布防很好,只有另外一个点疏忽了,攻击者就会利用这个点进行突破,让我们另外100处的努力也白费。
同样,安全的运营也是非常重要的,我们为Web站点建立起坚固的壁垒,而运营人员随意地使用root账号,给核心服务器开通外网访问IP等一系列违规操作,会让我们的壁垒瞬间崩塌。
9.2 Node.js中的Web安全
Node.js作为一门新型的开发语言,很多开发者都会用它来快速搭建Web站点,期间随着版本号的更替也修复了不少漏洞。因为Node.js提供的网络接口较PHP更为底层,同时没有如apache、nginx等Web服务器的前端保护,所以Node.js应该更加关注安全方面的问题。
9.2.1 HTTP管道洪水漏洞
在Node.js版本0.8.26和0.10.21之前,都存在一个管道洪水的拒绝服务漏洞(pipeline flood DoS)。官网在发布这个漏洞修复代码之后,强烈建议在生产环境使用Node.js的版本升级到0.8.26和0.10.21;这是因为这个漏洞威力巨大,攻击者可以用很廉价的普通PC轻易地击溃一个正常运行的Node.js的HTTP服务器。
这个漏洞产生的原因很简单,主要是因为客户端不接收服务器端的响应,但客户端又拼命发送请求,造成Node.js的Stream流无法泄洪,主机内存耗尽而崩溃,官网给出的解释如下:
当在一个连接上的客户端有很多HTTP请求管道,并且客户端没有读取Node.js服务器响应的数据,那么Node.js的服务将可能被击溃。强烈建议任何在生产环境下的版本是0.8或0.10的HTTP服务器都尽快升级。新版本Node.js修复了问题,当服务器端在等待stream流的drain事件时,socket和HTTP解析将会停止。在攻击脚本中,socket最终会超时,并被服务器端关闭连接。如果客户端并不是恶意攻击,只是发送大量的请求,但是响应非常缓慢,那么服务器端响应的速度也会相应降低。
现在让我们看一下这个漏洞造成的杀伤力吧,我们在一台4CPU,4GB内存的服务器上启动一个Node.js的HTTP服务,Node.js版本为0.10.7。

购买书籍

当当网购书 京东购书 卓越购书

PDF电子书下载地址

相关书籍

搜索更多