了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)

Guillermo Rauch 编  

赵静 译

ISBN 978-7-121-21769-2

2014年1月出版

定价:79.00元

320

16

编辑推荐

Node.js是一个由JavaScript书写而成的强大的web开发框架,它让开发强壮的、伸缩性良好的服务端web应用变得更加简单,容易。本书向你展示了什么是Node以及如何让你在项目中使用它。本书包含大量实际应用中的示例程序,证明了为什么Node.js会快速成为web开发首选工具的原因,通过本书,你能够快速熟悉和掌握达到如下目标所需的Node知识和技能:

了解Node基于事件轮询的架构、无阻塞IO以及事件驱动的编程方式

精通Node.js的API

轻松实现开发实时应用相关的技术,如SOCKET.IO和HTML5 WEBSOCKETS

编写能够支持跨多台服务器的高并发应用

通过Node来支持多种数据库以及数据存储工具

编写在单台服务器情况下能够处理万级并发量的程序

能够在一个包含更多Node知识和注解示例(含源代码)的网站上和其他开发者进行实时地沟通交流

本书包含大量全彩插图和实用的源代码,绝对是一本革命性web开发工具——Node的实用指南。

内容提要

本书是一本经典的 Learning by Doing的书籍。它由 Node社区著名的 Socket.IO作者—— Guillermo Rauch,通过大量的实践案例撰写,并由 Node社区非常活跃的开发者—— Goddy Zhao翻译而成。

本书内容主要由对五大部分的介绍组成: Node核心设计理念、 Node核心模块 API、Web开发、数据库以及测试。从前到后、由表及里地对使用 Node进行 Web开发的每一个环节都进行了深入的讲解,并且最大的特点就是通过大量的实际案例、代码展示来剖析技术点,讲解最佳实践。

目录

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

函数的参数数量. ........................... 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

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

接收连接....................................... 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

通过Connect实现一个简单的网站...................................... 111

中间件. ................................................. 112

书写可重用的中间件. .........................114

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

一个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

小结.................................................... 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

建立模型.................................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

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

作者简介

Guillermo Rauch(旧金山,加利福尼亚州)是一家位于旧金山,为

当地教育提供相关服务的创业公司LearnBoost的CTO和联合创始人。

Rauch还是几个知名Node.js项目的发明者,曾在JSConf和一些

Node.js workshop做过演讲。"

译者介绍:

Goddy Zhao(本名赵静),Successfactors(SAP子公司)软件工程师。毕业于复旦大学,先后在IBM、淘宝工作过,专注于企业级富客户端Web应用的开发,擅长前后端相结合的技术解决方案。曾与人合译过多本前端图书,并曾在沪JS及D2前端技术论坛担任过主持人和演讲嘉宾。个人主页http://goddyzhao.me。

媒体评论

本书写作精良 ——Amazon.com读者Shawn Rapp

本书直指要点,且无无用废话,可谓字字珠玑——Amazon.com读者Pragmateek

本书定位精确,用大量简单但鲁棒性强的模式帮助初学者走上用Node.js创建更复杂应用之路。这种简明扼要的写法很招人喜欢,面向教学做得很成功,是一本有效使用Node.js的参考书。——Amazon.com读者Pmjtoca

前言

绝大部分 Web应用都包含客户端和服务器端两部分。服务器端的实现往往比较复杂、麻烦。创建一个简单的服务器都要求对多线程、伸缩性以及服务器部署有专业的技术知识。除此之外,由于客户端软件是用 HTML和JavaScript来实现的,而服务器端核心代码通常都是用静态编程语言实现的,所以,开发 Web应用经常会有错乱的感觉。由于这种前后端开发语言的差异,不得不让开发者使用多种编程语言,同时还要对特定的程序逻辑事先做好设计选型。

几年前,要用 JavaScript来实现服务端软件几乎是想都不敢想的一件事情。糟糕的性能、不成熟的内存管理以及缺乏操作系统层面的集成,不解决这些问题, JavaScript很难成为一门服务器端的语言。作为 Google Chrome浏览器的一部分,新的 V8引擎能够解决前两个问题。 V8是一个开源的项目,通过简单的 API就可以将其集成进去。

Ryan Dahl洞察到了这样一个机会,可以通过将 V8内嵌到操作系统的集成层,来让 JavaScript享受到底层操作系统的异步接口,从而实现将其带到服务器端的目的。这就是 Node.js的设计思路。这么做的好处是显而易见的。程序员们可以在客户端和服务器端使用同样的编程语言了。 JavaScript动态语言的特性使得开发和试验服务器端代码变得很自由,使得程序员们摆脱了传统那种又慢又重的编程模式。

Node.js迅速蹿红,衍生了一个强大的开源社区、支持企业,甚至还拥有属于自己的技术大会。我把这种成功归结于它的简洁,高效,同时提高了编程生产力。我很高兴 V8成为其一小部分。

本书将带着读者学习如何基于 Node.js为Web应用构建服务器端部分,同时还会带着大家学习如何组织服务器端异步代码以及如何与数据库进行交互。

好好享受这本书带来的乐趣吧!

了不起的Node.js: 将JavaScript进行到底(Web开发首选,实时,跨多服务器,高并发)的更多相关文章

  1. 安装node.js+express for win7的Web开发环境配置

    1.安装 node.js. 进入官网的下载地址:http://www.nodejs.org/download/ . 选择Windows Installer或者选择Windows Installer ( ...

  2. [读书笔记]了不起的node.js+实践(一)

    环境的变化带来了技术大跃进,机遇和挑战同时到来.基于我js也没有学,只好赶鸭子上架一起学了.(>﹏<) 1.先读读书 一开始就不知死活地看<深入浅出node.js>,弄得团团转 ...

  3. Node.js: What is the best "full stack web framework" (with scaffolding, MVC, ORM, etc.) based on Node.js / server-side JavaScript? - Quora

    Node.js: What is the best "full stack web framework" (with scaffolding, MVC, ORM, etc.) ba ...

  4. node.js和JavaScript的关系

    node.js是一个基于 Chrome V8 引擎的 JavaScript 运行时环境. 一.类比JavaScript和java JavaScript java V8 JVM node.js JRE ...

  5. 如何理解Node.js和JavaScript的关系

    一.Javascript的引擎 浏览器一般有两个引擎,一个是Html引擎,一个是脚本引擎. JavaScript是一种脚本语言,最初用于浏览器的动态显示,方便操作页面数据和内容.但实际上,它也可以在浏 ...

  6. 使用Node.js原生API写一个web服务器

    Node.js是JavaScript基础上发展起来的语言,所以前端开发者应该天生就会一点.一般我们会用它来做CLI工具或者Web服务器,做Web服务器也有很多成熟的框架,比如Express和Koa.但 ...

  7. 基于 Angularjs&Node.js 云编辑器架构设计及开发实践

    基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...

  8. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)

    这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...

  9. 【强烈推荐,超详细,实操零失误】node.js安装 + npm安装教程 + Vue开发环境搭建

    node.js安装 + npm安装教程 + Vue开发环境搭建 [强烈推荐,超详细,实操零失误] 原博客园地址:https://www.cnblogs.com/goldlong/p/8027997.h ...

随机推荐

  1. Linux cp一个文件夹时提示cp: omitting directory `test/'

    将一个文件夹test 复制到地址/opt/tmp下,提示出错: cp: omitting directory `test/' 原因: test 目录下还有目录,不能直接进行拷贝. 我们先找下cp 的命 ...

  2. 总结一下使用react-native的一些入门级重要点

    经过多方的协调沟通,我们决定至4.1日起,停止向新用户透出该服务:今年10.15以后,老用户也停止该服务(具体表现是网站上传APK-Android或者URL-iOS入口会下掉,已经发版的App,SDK ...

  3. spring4+hibernate4+maven环境搭建

    本文主要介绍利用maven搭建spring4+hibernate4开发环境. 首先我们创建一个maven项目,具体步骤就不详细介绍了,看看我们pom.xml文件 <project xmlns=& ...

  4. (转)非常完善的Log4net详细说明

    转自:http://www.cnblogs.com/zhangchenliang/p/4546352.htmlhttp://www.cnblogs.com/zhangchenliang/p/45463 ...

  5. SQL 2008无法连接的解决办法

    问题: 在从本地客户端连接到SQL 2008的时候出现无法连接的错误.错误信息如下所示:

  6. [UCSD白板题] Fractional Knapsack

    Problem Introduction Given a set of items and total capacity of a knapsack,find the maximal value of ...

  7. Shmget 参数 0600的解释

    Shmget 参数 0600的解释 0660 百位6 -- 本用户有读写权. 十位6 -- 同组用户有读写权,个位0 -- 其它用户无读写执行权.与chmod 设法一样.

  8. java内存泄漏

    java内存泄漏主要分成两个方面: (1)堆中申请的空间没有被释放 (2)对象已不在被使用,但是仍然存在在内存当中 以下集中情况可能会导致内存泄漏 (1)静态集合的使用hashmap和vector,静 ...

  9. 查看上下文切换的多的进程(find which process take the most context switch)

    这是原文链接http://serverfault.com/questions/190049/find-out-which-task-is-generating-a-lot-of-context-swi ...

  10. CardView

    CardView继承至FrameLayout类,可以在一个卡片布局中一致性的显示内容,卡片可以包含圆角和阴影.CardView是一个Layout,可以布局其他View. CardView常用属性: c ...