HTML5中国

 找回密码
 立即注册

QQ登录

只需一步,快速开始

HTML5中国 首页 资源下载 书籍推荐 查看内容

Node.js项目实践:构建可扩展的Web应用

2015-7-6 12:49| 发布者: html5cn| 查看: 4222| 评论: 0|来自: 电子出版社

摘要: 这是一本全球获好评最多的Node书籍,原著获数百人五星推荐,国内顶尖团队奇舞团精选领域第一书,倾情翻译,迈向产品级开发的实战入门,理解更深,技能翻番,面向项目,涵盖第三方模块和组合技术,实战案例丰富 ...

  Node.js项目实践:构建可扩展的Web应用(Node实战|组件|工具|模块库大全 搞定最复杂应用 全面提升代码质量与开发效率)

  【美】Azat Mardan(阿扎.马尔丹) 著

  奇舞团 译

  ISBN 978-7-121-25903-6

  2015年6月出版

  定价:69.00元

  296页

  16开

  编辑推荐

  √ 全球获好评最多的Node书籍,原著获数百人五星推荐

  √ 国内顶尖团队奇舞团精选领域第一书,倾情翻译

  √ 迈向产品级开发的实战入门,理解更深,技能翻番

  √ 面向项目,涵盖第三方模块和组合技术,实战案例丰富

 

  本书会指导你逐步学习如何使用专业的开发工具来构建一系列基于Node.js的Web应用。Node.js是一个用于创建Web服务的平台,以创新设计和高效著称。但仅有Node.js核心本身并不能够解决所有问题!在现代Web开发中,通常需要将许多不同的组件组合在一起——路由、数据库驱动、ORM、会话管理、Oauth、HTML模板引擎、CSS编译器等。如果你已经对Node.js的基础知识有了一定的了解,那现在就是我们去探索它巨大的模块包生态系统并用来构建产品的时候了。作为一个Web开发者,你将通过本书了解到各种各样的标准和框架集合是如何完美地通过Node.js结合到一起的。

  本书会从JavaScript与Node.js的基础概念讲起,随后是必要模块的安装和详细介绍,再循序渐进地讲解如何编写和部署Web应用项目等你想了解的一切相关知识。我们会讨论各种库的引用,包括但不限于Express.js 4和Hapi.js框架,操作MongoDB数据库的Mongoskin和Mongoose ORM,Jade和Handlebars模板引擎,授权用户认证的OAuth模块和集成OAuth的Everyauth库,Mocha单元测试框架和Expect TDD/BDD语法,基于WebSocket协议提供实时通信的Socket.IO和DerbyJS库。

  能够动起手来跟着本书一起写代码的读者,可以接触到一个由众多小例子迭**发形成的博客项目,你会从零开始构建数据库脚本,写REST API和添加单元测试等进行全栈式的应用开发。本书还会介绍如何使用Git管理你的代码并将它们部署到Heroku平台和Amazon Web Service云服务平台上去。我们还利用Nginx、Varnish缓存、Upstart脚本、init.d脚本,还有forever模块等技术保证了应用程序的稳定运行。最后还会教你如何写你自己的Node.js模块包和在NPM发布它们。

 

  通过本书,你将学会:

  使用Express.js 4、MongoDB和Jade模板引擎构建Web应用

  利用MongoDB控制台操作数据

  通过Mocha、Expect和TravisCI为Node.js Web服务做测试用例

  基于token和session的身份验证

  使用Everyauth库实现第三方(Twitter)OAuth授权认证

  利用Redis、Node.js domains模块,以及cluster库等技巧和最佳实践来准备生产环境的代码

  在Amazon Web Services(AWS)云服务上部署Node.js应用时需要安装的组件

 

  内容提要

  《Node.js项目实践:构建可扩展的Web应用》用专业的讲解方式,带领读者从“Hello World”示例开始,一步步将其构建成有实际用途的Node.js应用。《Node.js项目实践:构建可扩展的Web应用》涉及许多组件的使用,比如安全、部署上线、组织代码、数据库驱动和模板引擎等,从中可使读者接触到很多经过历年实践所得出的广受欢迎的模块库,它们可以大大提高开发人员的代码质量和开发效率。

 

  目录

  第1 章 安装Node.js 及相关要点 .............. 1

  安装Node.js 和NPM ................................. 1

  一键安装 ................................................ 2

  通过HomeBrew 或MacPorts 安装 ........ 3

  通过tar 文件安装 .................................. 4

  无须sudo 授权进行安装 ........................ 4

  通过Git Repo 进行安装 ......................... 5

  通过Nave 进行多版本安装 ................... 5

  通过NVM 进行多版本安装................... 6

  其他的多版本系统 .................................. 6

  检查安装 ................................................ 7

  Node.js 控制台(REPL) ....................... 7

  加载Node.js 脚本....................................... 9

  Node.js 的基础和语法 ............................... 9

  弱类型 .................................................... 9

  Buffer——Node.js 特殊数据类型..........10

  对象字面量 ...........................................10

  函数 ....................................................... 11

  数组 .......................................................12

  原型特性 ...............................................12

  编码规范 ...............................................13

  Node.js 的全局变量和保留字 ................14

  __dirname 与process.cwd 的对比 .........17

  浏览器API 输助工具 ............................17

  Node.js 的核心模块 ...............................18

  便捷的Node.js 工具 ..............................20

  在Node.js 中读写文件 ..........................20

  Node.js 中的数据流 ...............................21

  使用NPM 安装Node.js 模块 ................21

  优化Node.js 中的回调函数...................22

  使用Node.js 的HTTP 模块来创建一个简单服务器 ...................23

  调试Node.js 程序......................................24

  核心Node.js 调试 ..................................24

  使用Node Inspector 来调试 ..................25

  Node.js 集成开发环境和代码编辑器 ...28

  监听文件变化 .............................................30

  小结 ...............................................................31

  第2 章 使用Express.js 4 创建Node.js 的Web 应用程序 ...................32

  什么是Express.js .......................................32

  Express.js 是如何工作的 ..........................35

  Express.js 的安装 .......................................36

  Express.js 的版本 ..................................36

  Express.js 生成器 ..................................37

  本地Express.js ......................................38

  Express.js 脚手架 .......................................40

  Express.js 命令行界面 ...........................41

  Express.js 中的路由 ...............................43

  Express.js 的核心——中间件 ................44

  一个Express.js 应用的配置...................45

  Jade 就是Express.js/Node.js 的Haml ...45

  脚手架总结 ...........................................45

  博客项目概述 .............................................46

  提交数据 ...............................................47

  Express.js 4 中的Hello World 例子 .......48

  创建文件夹 ...........................................49

  NPM 初始化和package.json .................50

  依赖声明:npm install ...........................50

  app.js 文件 .............................................51

  Jade 模板 ...............................................55

  运行Hello World 应用 ...........................56

  小结 ...............................................................56

  第3 章 Node.js 基于Mocha 的测试驱动开发和行为驱动开发 ......................57

  安装与理解Mocha ...................................58

  理解Mocha 的hook 机制 ......................60

  用assert 进行TDD ...................................61

  断言库Chai ...........................................63

  用Expect.js 进行BDD .............................64

  Expect.js 的语法 ....................................65

  项目:为博客开发一个BDD 测试 ......65

  将配置参数写入Makefile .....................68

  小结 ...............................................................69

  第4 章 模板引擎:Jade 和Handlebars 70

  Jade 的语法和特性 ...................................70

  标签 .......................................................71

  变量/数据 ..............................................71

  属性 .......................................................72

  字面量 ...................................................73

  文本 .......................................................73

  Script 和 Style 块 ..................................74

  JavaScript 代码 ......................................74

  注释 .......................................................75

  if 语句 ....................................................75

  each 语句 ...............................................75

  过滤器 ...................................................76

  读取变量 ...............................................76

  case ........................................................76

  函数mixin .............................................77

  include ....................................................78

  extend .....................................................78

  单独使用Jade .............................................79

  Handlebars 的语法 ....................................83

  变量 .......................................................83

  each 语句 ...............................................83

  非转义输出 ...........................................84

  if 语句 ....................................................85

  unless .....................................................85

  with ........................................................86

  注释 .......................................................87

  自定义 Helpers .....................................87

  Include ...................................................88

  单独使用Handlebars .................................88

  Express.js 4 中Jade 和Handlebars 的用法 ............................................91

  Jade 和 Express.js .................................92

  Handlebars 和Express.js ........................92

  项目:给博客添加Jade 模板 .................93

  layout.jade ..............................................94

  index.jade ...............................................96

  article.jade ..............................................97

  login.jade ................................................98

  post.jade .................................................99

  admin.jade ............................................ 100

  小结 ............................................................. 101

  第5 章 MongoDB、Mongoskin 特性 .... 102

  简单且正确地安装MongoDB .............. 103

  如何运行Mongo 服务 ............................ 104

  用控制台操作Mongo ............................. 105

  MongoDB shell 命令介绍 ...................... 106

  Node.js 版原生MongoDB 驱动示例 .. 107

  Mongoskin 的主要方法介绍 ................. 111

  项目:用Mongoskin 把博客数据存储到MongoDB ............................ 112

  项目:在MongoDB 中添加seed 数据 ......................................... 112

  项目:Mocha 测试 ............................... 113

  项目:添加持久连接 ........................... 115

  运行App .............................................. 126

  小结 ............................................................. 127

  第6 章 在Node.js 应用中使用session 和OAuth 进行用户认证和授权 ............... 128

  使用Express.js 中间件权限管理 ......... 128

  基于token 的用户认证 ........................... 129

  基于session 的用户认证 ........................ 130

  项目实践:为博客增加邮箱和密码登录功能 .......................................... 132

  session 中间件 ..................................... 132

  博客中的权限管理 ............................... 133

  博客中的用户授权 ............................... 136

  运行应用 ............................................. 138

  Node.js OAuth ........................................... 138

  使用Node.js OAuth 实现Twitter OAuth 2.0 的示例 ................................ 139

  Everyauth ............................................. 140

  项目实践:为博客增加Twitter OAuth 1.0 第三方登录(使用Everyauth 实现) .......... 141

  添加“使用Twitter 账户登录”链接 .. 142

  配置EveryauthTwitter 模块 ................. 142

  小结 ............................................................. 148

  第7 章 使用ORM 类库Mongoose 提升你的Node.js 数据 ......................... 149

  安装Mongoose ......................................... 150

  用独立的Mongoose 脚本建立数据库连接 .................................. 150

  Mongoose 的原型 .................................... 152

  使用钩子保持代码的逻辑清晰 ............ 154

  自定义静态方法和实例方法 ................ 155

  Mongoose 模型 ....................................... 155

  使用population 建立关系和连接 ........ 5074

  嵌套的文档 ............................................... 160

  虚拟字段 .................................................... 161

  修改原型的行为 ...................................... 162

  Express.js + Mongoose =真正的MVC ..................................... 164

  小结 ................................. 175

  第8 章 使用Express.js 和Hapi 构建Node.js REST API 服务 ....................... 176

  RESTful API 基础 ................................... 177

  项目依赖 .................................................... 179

  使用Mocha 和Superagent 进行测试 . 180

  使用Express 和Mongoskin 实现REST API 服务器 ...................................... 185

  重构:使用Hapi 搭建REST API 服务器 .............................................. 192

  小结 ............................................................. 199

  第9 章 WebSocket、Socket.IO 和DerbyJS 的实时应用程序 .................... 200

  什么是WebSocket ................................... 200

  用ws 模块的例子介绍本地WebSocket 和Node.js .............................. 201

  浏览器WebSocket 的实现 ................... 201

  用ws 模块实现Node.js 服务器 .......... 202

  Socket.IO 和Express.js 的例子 ............ 204

  用DerbyJS、Express.js 和MongoDB 搭建一个在线协作的代码编辑器例子 ........ 209

  项目依赖和package.json ..................... 210

  服务器端代码 ...................................... 211

  DerbyJS 应用程序 ................................ 213

  DerbyJS 视图 ....................................... 215

  编辑器Tryout ...................................... 217

  小结 ............................................................. 218

  第10 章 为Node.js 应用上线做准备 ..... 219

  环境变量 .................................................... 219

  生产环境下的Express.js ........................ 220

  生产环境下的Socket.IO ........................ 222

  错误处理 ................................ 223

  错误处理工具Node.js domains ............ 225

  使用Cluster 处理多线程 ........................ 229

  使用Cluster2 处理多线程 ..................... 232

  事件日志和监控 ...................................... 233

  监控 ..................................................... 233

  生产环境下的REPL ............................ 235

  Winston ................................................ 236

  使用Papertrail 应用来管理日志 ......... 237

  使用Grunt 处理任务 ............................... 237

  使用Git 来做版本控制和发布代码 ... 241

  安装Git ............................................... 242

  生成SSH 密钥 .................................... 242

  创建本地Git 仓库................................ 245

  将本地仓库推送到GitHub .................. 245

  在云上使用TravisCI 运行测试用例 .. 246

  TravisCI 配置 ...................................... 247

  小结 ............................................................. 248

  第11 章 部署Node.js 应用 ....................... 249

  部署到Heroku .......................................... 249

  部署到Amazon 网络服务 ..................... 255

  使用forever、Upstart 和init.d 保持Node.js 持续运行 ................ 259

  forever .................................................. 259

  Upstart .................................................. 260

  init.d ..................................................... 262

  尽可能使用Nginx 提供静态资源 ....... 264

  使用Varnish 缓存 .................................... 266

  小结 ............................................................. 268

  第12 章 Node.js 模块发布和参与开源 . 269

  推荐的目录结构 ...................................... 270

  所需模式 .................................................... 270

  package.json............................................... 273

  发布到NPM ............................................. 274

  锁定版本 .................................................... 274

  小结 ............................................................. 275

  结束语 ......................................................... 275

  进阶阅读 .................................................... 276

  勘误和联系方式 ...................................... 276

 

  作者简介

  Azat Mardan 在互联网、移动、软件开发方面有十多年的工作经验。他拥有信息学学士以及信息系统硕士学位,并且掌握和实践经验一样丰富的学术知识。最近,Azat 以团队领导/高级软件工程师的角色工作于DocuSign,他的团队采用最新技术 Node.js 栈、Express.js、

  Backbone.js、CoffeeScript、Jade、Stylus 以及 Redis 重构了拥有 5000 万用户的产品(DocuSign 网络应用)。

  之前,Azat 曾在 Storify.com(2013 被收购)、美国国家生物技术信息中心、联邦存款保险公司、洛克希德马丁以及其他公司任高级软件工程师。他在 Marakana 开源社区(2013 被收购)、pariSOMA、General Assembly San Francisco 以及Hack Reactor 上教编程,获得一致好评。Azat 会利用业余时间在他的博客 webapplog.com 上写技术文章。他还是其他 4 本 JavaScript 和 Node.js 图书的作者,包括亚马逊上客户端服务器类的畅销书:Rapid Prototyping with JS: Agile JavaScript Development。

  Azat 是开源 Node.js 项目:ExpressWorks、mongoui、HackHall 和 NodeFramework.com的创建者,同时,也是 Express、OAuth、jade-browser 以及其他 NPM 模块的贡献者。

 

  媒体评论

  √ 看过N本书后,很庆幸遇到了这本最好最全的node.js开发学习用书。作者立功了,留下一部可以让我们真正领略这一技术妙用的又好又全的作品!为什么我如此丧心病狂的点赞,是因为它让我从概念上得以提升,开始找到通向产品级编码的道路。没有它这毫无可能,必须隆重感谢作者和它的研究成果!

  ——原著读者Julia评论于2014-12-16

  我是一个中级码农,专攻Java和PHP。几年前,为进步开始自学Javascript和Node。看遍所有线上资料,被一个个链接累残后,我必须找本书来解救自己,它要覆盖我循序渐进提高必须的所有知识,《Node.js项目实践》就是这样一本书!

  它胜在:

  1)每章都有可操作的实战演练!我习惯于体验式学习,必须动手,而这正是这本书的特色!你可以按照你的想法给我解释什么是node,让我做好理论笔记,但我离不开可上手编码的过程,我需要有可验证的输出结果。

  2)内容组织得毫无瑕疵。每章都建立在以后知识之上,学习曲线平缓,不需要一上来就得面对较新的编程语言,否则我真是缺乏信心。

  3)这本书完整呈现如何实现诸多不同项目,其中一些可以直接拿来用在我们的应用开发中。这实在是这本书最大的实惠!

  如果你对Javascript一窍不通,建议提前学学。资料到处都是,而且将来创建应用也离不开它。稍作准备后,让这本最佳读物带你登堂入室,成为更称职的程序员。

  ——原著读者Ashley Storey评论于2015-1-26

  √ 毫无疑问的Node第一书!归根结底,一个努力确保读者体验的作者,做到了一站式服务和易学易读。软件开发图书最大的槽点就是内容过时,滞后6个月的书就有可能无法运行其中的代码,需要你用95%的时间找出为什么不能运行的原因。之所以大爱这本书,正是因为所有步骤里涉及的中间件都能确保可用。比如,书里采用的是"npm install -g express-generator@4.0.0",而不是"npm install -g express-generator" ,小细节,大不同!编写风格简洁到位,案例精彩,真实有效,其中蕴藏着众多知识精化……百分百支持,都等不及他的下一本书了:)

  ——原著读者Paul Coady 评论于2015-4-8

  √ 近几个礼拜,我一直充满愉悦地拜读Azat Mardan的近作《Node.js项目实践:构建可扩展的Web应用》。不得不说,写得真好,信息量真大,绝对是迄今为止最有用的Node.js实践指导。如果你在寻找如何用Node.JS专业层面的书籍,这本书可谓量身**!

  这本书的宗旨在于如何用好node.js,不止是纯node,还包括很多有用的第三方模块。很多书把所有笔墨都用在深度剖析node.js本身上,但是这并不会给读者带来真正用它创建项目的清晰认识。

  顾名思义,《Node.js项目实践》完整呈现如何创建一个真实产品级的web应用,通过大量真实项目的详细实现步骤。事实上,这些真实的有效范例可以在https://github.com/azat-co/practicalnode免费获取。

  很想为作者设身处地为读者着相的苦心而鼓掌,这让读者的阅读体验可以畅快而高效!

  ——原著读者azey47评论于2015-2-17

 

  前言

  近来,介绍Node.js 的书籍和网络资源越来越多,比如输出Hello World 或如何开发简单的应用。但大多数的教程都只是依赖核心包或一两个NPM(Node 包管理器)插件而已,这种“沙盒”式的教程虽然方便快捷且不需要很多的依赖关系,可相对于真正的Node.js项目实践而言,这些还真的只能算是“基础知识”。原因在于,Node.js 特殊的设计模式—保持短小精悍。同时,拥有大量用户群的非官方Node 包/模块管理和分发生态系统(例如:NPM)也在飞速成长着,为Node.js 提供了良好的产业发展。与Node.js 有关的一切实用资源都在那里可以找到,包罗万象,可以用来当作学习工具,查找代码案例,甚至是参考手册。

 

  本书的用途

  本书可以说是一本实践手册,这里详细讲解了如何借用Node.js 的模块包富生态系统来打造精良的Web 服务和应用。这对所有Web 开发者来说都是一件很重要的事情,因为现实中的Web 应用开发会涉及许多组件的使用,比如安全、部署上线、组织代码、数据库驱动和模板引擎等。所以,在本书的12 个章节中,我们也会对第三方服务、命令行工具、NPM诸多的模块、框架和库进行充分的介绍。

  这里先让诸位兴奋一下,本书中对技术和工具的介绍是**飞起来的,从Express.js 4开始,Hapi.js、DerbyJS、Mongoskin、Mongoose、Everyauth、Mocha、Jade、Socket.IO、TravisCI、Heroku、Amazon Web Services(AWS)等,根本停不下来,并且其中很多内容都是在严谨的项目中扮演着至关重要的角色。

  另外,我们的项目实例都是从几个概念明确的小项目开始,再逐步构建成一个复杂的应用程序的。你可以在这些成熟的项目样本基础上按需启动你自己的开发工作,自然也就可以避免高价走歪路。

  最后同样重要的是,看完这本书也不算完!当你在实际项目中遇到具有挑战性的问题时,你可能需要再回来查阅本书中的某些论题和章节,是的,本书同样具有参考手册的功能。

  本书的宗旨只有一个,尽量减少你的开发时间,进而使你成为更专业的Node.js 工程师!

 

  阅读提示

  虽然在第1 章我们就讲到了各种安装方式和Node.js 与浏览器端JavaScript 的一些重要区别,可本书的核心思想依旧是如何构建可用于生产环境的Node.js 应用,或更大更复杂的Node.js 项目实践。因此,本书并不是新手入门书,也没有对Node.js 工作原理与核心模块进行深入介绍。

  我们也不能保证书中每个组件的介绍和话题你都会感兴趣和使用到,因为这个要看你具体的项目需求。基本上没有可行的方法把那么多话题放到一本书里,然后事无巨细地讲解。我们只求你能通过阅读本书快速开始构建你自己的项目。

  关于本书的另一个提醒(也适用于任何其他编程的书籍),本书例子中所适用的模块包版本最终都会过时。不过,通常情况下这并不是一个问题,毕竟在本书的例子中已经显式锁定了版本号。所以不管怎样,只要你用的是我们实例中使用的版本号,就没问题。

  即便你决定要使用最新版本的组件,许多情况下这也不是问题,因为组件还是一个组件,只是版本不同而已,一般有良心的维护者都会使其向下兼容的,仔细调试一下就可以了,偶尔出现了Bug 导致应用运行中断也是很容易就可以修复的。

 

  读者对象

  本书是一本介绍Node.js 编程的书籍,学习难度在中高级水平。为了有效地使用它,你需要有一定的Node.js 编程经验。我们假定本书的读者已熟悉计算机科学、编程概念、Web开发、Node.js 核心模块、HTTP 和互联网工作原理等相关领域的知识。

  根据你的编程水平和学习能力,你可以通过本书中所引用的外部资源链接去快速访问该知识点的官方文档和相关介绍,从而填充这一部分知识的空缺。另外,如果你有其他编程语言的编程背景,那在学习Node.js 和阅读本书时相对而言会比较容易理解。

  正如前面提到的,本书是为中级和高级软件工程师编写的。出于这个原因,有三类程序员最能够从中受益:

  1. 通才或全栈开发工程师,还包括开发运营(DevOp)和质量保证(QA)自动化工程师

  2. 有经验的前端Web 开发人员,对浏览器端JavaScript 有深度的理解

  3. 熟练使用其他语言(如Java、PHP 和Ruby)的后端软件工程师,相信谁都不会介意用JavaScript 语言做一些可以加快工作效率的事情

  源代码

  为了更有效地学习本书中的知识点,我们几乎在每一章中都会列举出很多代码实例,以让你进行更好的理解。出于方便和开源透明的信念,我们将书中所有实例都在GitHub 上公开,你可以按需下载:https://github.com/azat-co/practicalnode。

  勘误和联系方式

  如果你发现任何错误或错别字等(好吧,我想你肯定会找到的),请在放置本书实例的GitHub 上(https://github.com/azat-co/practicalnode)开个议题或直接在代码里修复了再更新上来吧。关于其他更新和联系信息,可以访问我们为本书提供的站点:http://practicalnodebook.com。

  符号的使用

  本书遵循一些格式化惯例,代码使用的是等宽字体,例如:var book = {name:'Practical Node.js'};。如果代码行以“$”符号开始,那意味着这段代码是在终端/命令行方式下执行的。但如果代码行始于“>”,则代表代码是在虚拟环境下运行的(也可以说是“控制台”,无论是Node.js 或MongoDB 的)。如果在代码里有调用到Node.js 模块,一般都会以require()方法引入,且这个NPM 名称就作为变量名,如superagent。

  你为什么要读这本书

  本书会用专业的讲解方式,带你从“Hello World”示例开始,一步步将其构建成有实际用途的Node.js 应用。从中你可以接触到很多经过历年实践所得出的广受欢迎的Node.js模块库,它们可以大大提高你的代码质量和开发效率。同时,虽然本书中所讲的并不是什么开创性的高科技,但通过它你可以节省大量在网上查询开发资料(有些你可能查不到)的时间。因此,我们可以负责任地说,如果你能认真看完本书,那你在Node.js 编程上的开发能力将出现质的飞跃!

 

  2015年6月30日-2015年7月6日,HTML5中国微博有此书的转发抽奖活动

  送书活动地址:http://weibo.com/2357270831/CoXxjAYvy?from=page_1006062357270831_profile&wvr=6&mod=weibotime&type=comment#_rnd1436157979436

 

  


鲜花

握手

雷人

路过

鸡蛋

相关阅读

最新评论

HTML5中国微信

小黑屋|关于我们|HTML5论坛|友情链接|手机版|HTML5中国 ( 京ICP备11006447号 京公网安备:11010802018489号  

GMT+8, 2017-4-28 06:53

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

返回顶部