了不起的Node.js:将JavaScript进行到底(全彩)
  • 推荐0
  • 收藏1
  • 浏览972

了不起的Node.js:将JavaScript进行到底(全彩)

Guillermo Rauch(吉列尔莫.劳奇) (作者)  赵静 (译者)

  • 书  号:978-7-121-21769-2
  • 出版日期:2013-11-19
  • 页  数:304
  • 开  本:16(185*230)
  • 出版状态:上市销售
  • 原书名: SMASHING Node.js: JavaScript Everywhere
  • 原书号:9781119962595
  • 维护人:张春雨
本书是一本经典的Learning by Doing的书籍。它由Node社区著名的 Socket.IO作者——GuillermoRauch,通过大量的实践案例撰写,并由 Node社区非常活跃的开发者——Goddy Zhao翻译而成。
本书内容主要由对五大部分的介绍组成:Node核心设计理念、Node核心模块API、Web开发、数据库以及测试。从前到后、由表及里地对使用 Node进行Web开发的每一个环节都进行了深入的讲解,并且最大的特点就是通过大量的实际案例、代码展示来剖析技术点,讲解最佳实践。
译者序
从2009年Ryan Dahl着手开发Node.js开始,到现在Node已经快4岁了。尽管它至今还未发
布1.0版本,甚至连alpha都还没有,但是Node这几年的发展大家都是有目共睹的。越来越多的
开发者和公司开始尝试使用 Node.js:微软在其Azure云上支持了部署Node.js应用,它同时还
是Node Windows版本的主要贡献者;雅虎主站大量使用了Node;LinkedIn也使用Node为其移
动应用提供服务器端服务。除此之外,Node官方Wiki页面(https://github.com/joyent/node/wiki/
Projects,-Applications,-and-Companies-Using-Node)列出了更多在使用Node的公司和项目。可
以说,Node以其异步 IO、服务器端JavaScript的特点为Web开发掀开了新的篇章。
然而,尽管Node这几年发展神速,但是相关的书籍、资料却很少,尤其在国内就更是
寥寥无几。这就让我萌发了为国内Node爱好者翻译一本 Node书籍的想法,于是我就想到了
SMASHING Node.js: JavaScript Everywhere。之所以选择这本书,是因为:首先,这本书的作者
Guillermo Rauch在Node社区非常有名,作为Socket.IO的作者、Express的开发者之一,他为社
区贡献了很多质量很高的Node模块;其次,我此前碰巧有幸受原书出版社WILEY之邀,担任
了原书的技术审校,所以我对原书内容非常熟悉;最后,也是主要的原因,是因为这本书有大
量的实践案例,我个人始终认为学习技术的最佳方式就是实践,而且本书中的案例在阐述技术
点的同时,还非常具有实践价值。在上述三点原因的驱使下,最终让我决定向电子工业出版社
引荐此书,最后也很高兴出版社能够认同这本书并决定引进此书。
本书根据Web开发的流程,从Node核心概念——事件轮询、V8中的 JavaScript的介绍,
Node核心库——TCP、HTTP的讲解,到应用层开发——Connect、Express、Socket.IO的实践,
再到数据库——MongoDB、Redis、MySQL的剖析,最后到测试——Mocha、BDD的阐述,每
个环节都一一做了深入的讲解。另外,本书始终贯穿了 Learning by Doing的理念,每一章都有
大量的实践案例、代码展示,以编写实际代码的方式让读者掌握技术、同时教会读者如何将其
运用到实际项目中。总的来说,本书确实是一本学习Node的好书。
最后,在本书翻译过程中要特别感谢来自淘宝网工程师——易敛(花名)以及聚美优品工
程师——邵信衡给予的帮助。另外,还要感谢本书的编辑张春雨和贾莉的辛苦工作,以及我太
太的大力支持。
希望本书能够为广大Node开发者带来帮助,谢谢!
Goddy Zhao(赵静),SuccessFactors(SAP子公司)软件工程师。毕业于复旦大学,先后在IBM、淘
宝工作过,专注于企业级富客户端Web应用的开发,擅长前后端相结合的技术解决方案。曾与人合译过
多本前端图书,并曾在沪JS及D2前端技术论坛担任过主持人和演讲嘉宾。
前言
绝大部分Web应用都包含客户端和服务器端两部分。服务器端的实现往往比较复杂、麻
烦。创建一个简单的服务器都要求对多线程、伸缩性以及服务器部署有专业的技术知识。除
此之外,由于客户端软件是用HTML和JavaScript来实现的,而服务器端核心代码通常都是用静
态编程语言实现的,所以,开发Web应用经常会有错乱的感觉。由于这种前后端开发语言的差
异,不得不让开发者使用多种编程语言,同时还要对特定的程序逻辑事先做好设计选型。
几年前,要用JavaScript来实现服务端软件几乎是想都不敢想的一件事情。糟糕的性能、
不成熟的内存管理以及缺乏操作系统层面的集成,不解决这些问题,JavaScript很难成为一门
服务器端的语言。作为 Google Chrome浏览器的一部分,新的V8引擎能够解决前两个问题。
V8是一个开源的项目,通过简单的API就可以将其集成进去。
Ryan Dahl洞察到了这样一个机会,可以通过将V8内嵌到操作系统的集成层,来让
JavaScript享受到底层操作系统的异步接口,从而实现将其带到服务器端的目的。这就是Node.js
的设计思路。这么做的好处是显而易见的。程序员们可以在客户端和服务器端使用同样的编程
语言了。 JavaScript动态语言的特性使得开发和试验服务器端代码变得很自由,使得程序员们
摆脱了传统那种又慢又重的编程模式。
Node.js迅速蹿红,衍生了一个强大的开源社区、支持企业,甚至还拥有属于自己的技术
大会。我把这种成功归结于它的简洁,高效,同时提高了编程生产力。我很高兴V8成为其一
小部分。
本书将带着读者学习如何基于Node.js为Web应用构建服务器端部分,同时还会带着大家学
习如何组织服务器端异步代码以及如何与数据库进行交互。
好好享受这本书带来的乐趣吧!
Lars Bak,Virtual Machinist
介绍
2009年年末,Ryan Dahl在柏林的一个JavaScript大会上宣布了一项名为Node.js(http://
nodejs.org/)的新技术。有意思的是,出乎所有参会者的意料,这项技术居然不是运行在浏览
器端的,要知道浏览器端对于JavaScript来说绝对是拥有霸主地位的,这是毋庸置疑的。
这项技术是关于在服务器端运行JavaScript的。当时,这简单的一句描述,瞬间让听众眼
前一亮,同时也宣告了这项新技术的发布大获成功。
如果成真的话,以后开发Web应用就只需要一种语言了。
毫无疑问,这是当时所有人的第一想法。毕竟,要开发一个现代富客户端Web应用,必须
要对JavaScript非常熟悉和了解,然而,对于服务器端的技术来说,就有很多不同的选择,而
且都需要专业的要求。拿Facebook来说,他们最近透露其总代码库中JS的代码量是服务器端语
言PHP的四倍。
不过Ryan感兴趣的是为大家展示一个简洁又强大的示例程序。他展示了一个Node.js中的
“hello world”程序——创建一个Web服务器。
这样一个Web服务器并非只是个“玩具”,相反,它是一个高性能的Web服务器,甚至,
在某些场景下,比现有如Apache和Nginx这样的Web服务器性能还要好。Node.js被称为是一个
将设计网络应用导向正确道路的特殊工具。
Node.js快速高效的优点得益于一种叫做事件轮询(event loop)的技术,以及其构建于V8
之上,V8是Google为Chrome Web浏览器设计的 JavaScript解释器和虚拟机,它运行JavaScript非
常快。
Node.js改变了Web开发模式。你无须再将书写部署到独立安装的Web服务器中去运行,如
􀻓􀰭􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀗 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀘􀀛􀀖􀀙􀀛􀀑􀀑
介绍VII
传统的LAMP模式,它通常包含了PHP环境和 Apache服务器。
正如本书正文中将要介绍的,获得Web服务器完全的控制权催生了另外一类基于Node.js开
发的应用:实时Web应用。在一个服务器端和众多客户端进行快速的数据传输,在Node开发中
变得越来越常见。这意味着你既可以创建更高效的程序,又能成为社区的一部分,推进理想的
Web开发模式。
有了Node,你就有了主动权。同时,本书也会详细介绍这种能力背后所带来的新的挑战
和责任。
目标
首先最重要的是,本书是一本关于JavaScript的书。你必须具备一定的JavaScript知识,同时,
一开始我也花了一章来介绍JavaScript的相关概念,根据我的经验来看,这是非常有帮助的。
正如你将会学到的,Node.js努力为浏览器端开发者提供一个舒服的开发环境。有些常用
的表达式,如setTimeout和console.log,并非语言标准的一部分,而是浏览器添加的,
它们在Node.js中也能使用。
在你理清思绪,准备就绪后,就可以开始Node之旅。作为其核心的一部分,Node自带了
很多有用的模块,以及一个名为NPM的简单包管理器。本书从教你如何仅使用Node核心模块
构建应用开始,随后教你使用一些最有用的社区开发者基于Node开发的模块来开发应用,这
些模块都可以通过NPM安装获得。
在介绍如何用专门设计的模块解决特定问题前,我通常会先介绍如何在不使用模块的情况
下解决此问题。理解一个工具最好的方式就是首先搞明白为什么会有这个工具。因此,在学习
某个Web框架前,你会先学习为什么用它要比使用Node.js原生的HTTP模块要好。在学习如何
使用如Socket.IO的跨浏览器的实时框架构建应用前,你会先学习 HTML5 WebSocket的缺陷。
本书包含大量示例。这些示例,会教你如何一步一步构建小应用或者测试不同的API。本
书所有的示例代码都可以通过node命令运行,以下是两种不同的使用方式:
通过node REPL(Read-Eval-Print Loop)。和Firebug或者■ Web调试器中的JavaScript控制
台类似,node REPL允许你从操作系统的命令行工具输入JavaScript代码,按下回车键,
就能执行。
■ 通过node命令运行node文件。这种方式要求你使用已有的文本编辑器。我个人推荐
vim(http://vim.org)编辑器,不过,任何文本编辑器都是可以的。
绝大多数例子,会一步步教你书写示例代码,并且,首次书写会讲解其代码含义。我还会
带领你经历不同的考验以及代码重构。当到了重要的里程碑时,我通常会展示一个截图,截图
􀻓􀰭􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀘 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀘􀀛􀀖􀀙􀀛􀀑􀀑
VIII 介绍
内容取决于开发的应用,可能是终端的截图,也可能是浏览器端窗口的截图。
有的时候,讲解这些示例的时候,不管考虑得多周全,问题可能还是无法避免。所以,我
给你提供了一个资源列表来帮助你解决问题。
资源
要是在阅读本书中,遇到问题,可以通过如下途径获得帮助。
要获得关于Node.js的问题的帮助,可以通过如下途径:
Node.js邮件列表(http://groups.google.■ com/group/nodejs)。
■ irc.freenode.net服务器,#nodejs频道。
要获得如socket.io或者express等的特定项目的帮助,可以通过官方支持频道;如果
没有,可以通过像Stack Overflow(http:// stackoverflow.com/questions/tagged/node.js)这样的论
坛,都会很有帮助。
绝大多数的Node.js模块都托管在GitHub上。如果你发现了bug,就可以通过GitHub报给他
们,并贡献相应的测试用例。
尽力弄清楚你的问题到底属于Node.js还是JavaScript。这对确保你寻求的Node.js帮助确实
是与Node相关的问题很有帮助。
如果就本书中的某个问题想要讨论,可以直接通过rauchg@gmail.com联系我。

目录

目录
PART Ⅰ 从安装与概念开始
CHAPTER 1 安装 3
在Windows下安装 3
在OS X下安装 4
在Linux下安装 5
编译 5
确保安装成功 5
Node REPL 5
执行文件 6
NPM 6
安装模块 7
自定义模块 8
安装二进制工具包 9
浏览NPM仓库 9
小结 10
CHAPTER 2 JavaScript概览 11
介绍 11
JavaScript基础 12
类型 12
类型的困惑 12
函数 13
THIS、FUNCTION#CALL以及FUNCTION#APPLY 14
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀚 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
X 目录
函数的参数数量 14
闭包 14
类 15
继承 16
TRY {} CATCH {} 17
v8中的JavaScript 17
OBJECT#KEYS 18
ARRAY#ISARRAY 18
数组方法 18
字符串方法 19
JSON 19
FUNCTION#BIND 19
FUNCTION#NAME 19
_PROTO_(继承) 20
存取器 20
小结 21
CHAPTER 3 阻塞与非阻塞IO 23
能力越强,责任就越大 23
阻塞 25
单线程的世界 27
错误处理 29
堆栈追踪 30
小结 32
CHAPTER 4 Node中的JavaScript 33
global对象 33
实用的全局对象 34
模块系统 34
绝对和相对模块 35
暴露API 37
事件 38
buffer 40
小结 41
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀒􀀑 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
目录XI
PART Ⅱ Node重要的API
CHAPTER 5 命令行工具(CLI)以及FS API:首个Node应用 45
需求 45
编写首个Node程序 46
创建模块 46
同步还是异步 47
理解什么是流(stream) 49
输入和输出 50
重构 53
用fs进行文件操作 55
对CLI一探究竟 56
argv 57
工作目录 57
环境变量 58
退出 58
信号 58
ANSI转义码 59
对fs一探究竟 59
Stream 59
监视 60
小结 61
CHAPTER 6 TCP 63
TCP有哪些特性 64
面向连接的通信和保证顺序的传递 64
面向字节 65
可靠性 65
流控制 65
拥堵控制 65
Telnet 65
基于TCP的聊天程序 68
创建模块 68
理解NET.SERVER API 68
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀒􀀒 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
XII 目录
接收连接 70
data事件 71
状态以及记录连接情况 73
圆满完成此程序 75
一个IRC客户端程序 77
创建模块 77
理解NET#STREAM API 78
实现部分IRC协议 78
测试实际的IRC服务器 78
小结 79
CHAPTER 7 HTTP 81
HTTP结构 81
头信息 82
连接 87
一个简单的Web服务器 88
创建模块 88
输出表单 88
method和URL 90
数据 92
整合 94
让程序更健壮 95
一个Twitter Web客户端 96
创建模块 96
发送一个简单的HTTP请求 97
发送数据 98
获取推文 99
superagent来拯救 102
使用up重启HTTP服务器 103
小结 104
PART Ⅲ Web开发
CHAPTER 8 Connect 107
使用HTTP构建一个简单的网站 108
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀒􀀓 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
目录XIII
通过Connect实现一个简单的网站 111
中间件 112
书写可重用的中间件
static中间件 119
query中间件 120
logger中间件 120
body parser中间件 122
cookie 125
会话(session) 126
Redis session 131
methodOverride中间件 132
basicAuth中间件 132
小结 134
CHAPTER 9 Express 135
一个小型Express应用 135
创建模块 136
HTML 136
SETUP 137
定义路由 137
查询 140
运行 141
设置 142
模板引擎 143
错误处理 144
快捷方法 144
路由 146
中间件 148
代码组织策略 149
小结 151
CHAPTER 10 WebSocket 153
Ajax 153
HTML5 WebSocket 156
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀒􀀔 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
XIV 目录
一个ECHO示例 157
初始化项目 157
建立服务器 158
建立客户端 159
运行示例程序 160
鼠标光标 161
初始化示例程序 161
建立服务器 161
建立客户端 164
运行示例程序 166
面临一个挑战 166
关闭并不意味着断开连接 166
JSON 167
重连 167
广播 167
WebSocket属于HTML5:早期浏览器不支持 167
解决方案 167
小结 167
CHAPTER 11 Socket.IO 169
传输 170
断开 VS 关闭 170
事件 170
命名空间 171
聊天程序 172
初始化程序 172
构建服务器 172
构建客户端 173
事件和广播 175
消息接收确认 179
一个轮流做DJ的应用 180
扩展聊天应用 181
集成Grooveshark API 182
播放歌曲 185
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀒􀀕 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
目录XV
小结 190
PART Ⅳ 数据库
CHAPTER 12 MongoDB 193
安装 195
使用MongoDB:一个用户认证的例子 195
构建应用程序 195
创建Express App 196
连接MongoDB 200
创建文档 201
查找文档 203
身份验证中间件 204
校验 205
原子性 206
安全模式 206
Mongoose介绍 206
定义模型 207
定义嵌套的键 208
定义嵌套文档 209
构建索引 209
中间件 209
探测模型状态 210
查询 210
扩展查询 210
排序 211
选择 211
限制 211
跳过 211
自动产生键 211
转换 212
一个使用Mongoose的例子 212
构建应用 212
重构 213
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀒􀀖 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
XVI 目录
建立模型 213
小结 215
CHAPTER 13 MySQL 217
node-mysql 217
初始化项目 217
Express应用 218
连接MySQL 219
初始化脚本 220
创建数据 224
获取数据 228
sequelize 229
初始化sequelize 230
初始化Express应用 230
连接sequelize 233
定义模型和同步 234
创建数据 236
获取数据 238
删除数据 239
完整地完成应用 240
小结 241
CHAPTER 14 Redis 243
安装Redis 244
Redis查询语言 245
数据类型 245
字符串 246
哈希 246
列表 248
数据集 249
有序数据集 249
Redis和Node 249
使用node-redis实现一个社交图谱 250
小结 259
􀬢􀩣􀀏􀁊􀁏􀁅􀁅􀀁􀀁􀀁􀀒􀀗 􀀓􀀑􀀒􀀔􀀎􀀒􀀒􀀎􀀒􀀁􀀁􀀁􀀒􀀙􀀛􀀔􀀚􀀛􀀓􀀚
目录XVII
PART Ⅴ 测试
CHAPTER 15 代码共享 263
什么样的代码可以共享 263
书写兼容的JavaScript代码 264
导出模块 264
模拟实现ECMA API 265
模拟实现Node API 267
模拟实现浏览器端API 267
跨浏览器的继承实现 268
集成到一起:browserbuild 268
基础案例 269
小结 271
CHAPTER 16 测试 273
简单测试 273
测试目标 274
测试策略 274
测试程序 275
expect.js 276
API一览 276
Mocha 278
测试异步代码 279
BDD风格 281
TDD风格 281
export风格 282
在浏览器端使用Mocha 282
小结 284
索引 285

读者评论

  • 请问这本书的配套资源有吗?求源码。谢谢!

    ybygjylj发表于 2019/7/29 17:37:21