Node.js 实战(双色)
基本信息
编辑推荐
因为CNode社区点击率颇高、粉丝数万的《一起学node.js》,我认识了《Node.js实战》这本书的几位作者,他们在CNode社区内的贡献、与粉丝跟帖及回复频率,文章更新速度,让我确定了与其合作的想法。很高兴,《Node.js实战》没有成为教条式的入门级别,而是跳出Node.js入门的圈子,真正进入Node.js实战层次。《Node.js实战》的内容架构也是由简入难的,Node.js入门级读者也可从中得到灵感。《Node.js实战》的几位作者为大家建立了《Node.js实战》官方QQ群: 156627943,并建立了《Node.js实战》读者反馈网站:http://nodejs.ucdok.com/。对《Node.js实战》的内容用6个字可以总结:让人大呼过瘾!废话不多说了,目录就在下方,赶快看吧,绝对物超所值。
内容简介
作译者
寸志,毕业于同济大学信息安全专业,现任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
前言
本书目的
目前,市面上已经有很多关于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的进程与线程
媒体评论
——袁锋(@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集群代理层)
书摘
在互联网时代,数据安全与个人隐私受到了前所未有的挑战,我们作为网站开发者,必须让一个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。服务器脚本如下:
var http = require('http');