内容简介
亚历克斯•杨(Alex Young)
经验丰富的Web开发者,广受欢迎的JavaScript社区DailyJS创始人。目前任职于Apple。另著有《Node.js硬实战》。
布拉德利•马克(Bradley Meck)
TC39和Node.js基金会成员。业余时间醉心于为JavaScript制作工具、园艺和指导学生。
麦克•坎特伦(Mike Cantelon)
Node.js核心框架贡献者,Node社区活跃分子,培训师和演讲人。
蒂姆•奥克斯利(Tim Oxley)
JavaScript(Node.js/React)自由撰稿人。
马克•哈特(Marc Harter)
Node.js核心框架贡献者。
T.J.霍洛瓦丘(T.J.Holowaychuk)
参与开发了很多Node.js模块,包括流行的Express框架。
内森•拉伊利赫(Nathan Rajl...
()
作品目录
第一部分 Node基础知识介绍
第1章 欢迎进入Node.js的世界 2
1.1 一个典型的Node Web应用程序 2
1.1.1 非阻塞I/O 3
1.1.2 事件轮询 4
1.2 ES2015、Node和V8 5
1.2.1 Node与V8 7
1.2.2 使用特性组 8
1.2.3 了解Node的发布计划 8
1.3 安装Node 8
1.4 Node自带的工具 9
1.4.1 npm 9
1.4.2 核心模块 10
1.4.3 调试器 11
1.5 三种主流的Node程序 12
1.5.1 Web应用程序 12
1.5.2 命令行工具和后台程序 13
1.5.3 桌面程序 14
1.5.4 适合Node的应用程序 14
1.6 总结 15
第2章 Node编程基础 16
2.1 Node功能的组织及重用 16
2.2 开始一个新的Node项目 18
2.3 用module.exports微调模块的创建 20
2.4 用node_modules重用模块 22
2.5 注意事项 23
2.6 使用异步编程技术 24
2.7 用回调处理一次性事件 25
2.8 用事件发射器处理重复性事件 28
2.8.1 事件发射器示例 28
2.8.2 响应只应该发生一次的事件 29
2.8.3 创建事件发射器:一个PUB/SUB的例子 29
2.8.4 扩展事件监听器:文件监视器 32
2.9 异步开发的难题 34
2.10 异步逻辑的顺序化 35
2.11 何时使用串行流程控制 36
2.12 实现串行化流程控制 37
2.13 实现并行化流程控制 39
2.14 利用社区里的工具 41
2.15 总结 43
第3章 Node Web程序是什么 44
3.1 了解Node Web程序的结构 45
3.1.1 开始一个新的Web程序 45
3.1.2 跟其他平台比一比 47
3.1.3 然后呢 47
3.2 搭建一个RESTful Web服务 47
3.3 添加数据库 50
3.3.1 制作自己的模型API 51
3.3.2 让文章可读并把它存起来 53
3.4 添加用户界面 54
3.4.1 支持多种格式 54
3.4.2 渲染模板 55
3.4.3 用npm管理客户端依赖项 56
3.5 总结 57
第二部分 Node的Web开发
第4章 前端构建系统 60
4.1 了解基于Node的前端开发 60
4.2 用npm运行脚本 61
4.2.1 创建定制的npm脚本 62
4.2.2 配置前端构建工具 63
4.3 用Gulp实现自动化 63
4.3.1 把Gulp添加到项目中 64
4.3.2 Gulp任务的创建及运行 64
4.3.3 监测变化 66
4.3.4 在大项目中把任务分散到不同文件中 66
4.4 用Webpack构建Web程序 67
4.4.1 使用打包器和插件 67
4.4.2 配置和运行Webpack 68
4.4.3 用Webpack开发服务器 68
4.4.4 加载CommonJS模块和静态资源 70
4.5 总结 71
第5章 服务器端框架 72
5.1 用户画像 72
5.1.1 菲尔:代理开发者 73
5.1.2 纳迪娜:开源开发者 73
5.1.3 爱丽丝:产品开发者 73
5.2 框架是什么 74
5.3 Koa 74
5.3.1 设置 76
5.3.2 定义路由 76
5.3.3 REST API 77
5.3.4 优点 77
5.3.5 弱点 77
5.4 Kraken 77
5.4.1 设置 77
5.4.2 定义路由 78
5.4.3 REST API 79
5.4.4 优点 79
5.4.5 弱点 79
5.5 hapi 79
5.5.1 设置 80
5.5.2 定义路由 80
5.5.3 插件 81
5.5.4 REST API 82
5.5.5 优点 83
5.5.6 弱点 83
5.6 Sails.js 83
5.6.1 设置 83
5.6.2 定义路由 84
5.6.3 REST API 84
5.6.4 优点 85
5.6.5 弱点 85
5.7 DerbyJS 85
5.7.1 设置 85
5.7.2 定义路由 86
5.7.3 REST API 87
5.7.4 优点 87
5.7.5 弱点 87
5.8 Flatiron.js 87
5.8.1 设置 88
5.8.2 定义路由 88
5.8.3 REST API 89
5.8.4 优点 90
5.8.5 弱点 90
5.9 LoopBack 90
5.9.1 设置 91
5.9.2 定义路由 92
5.9.3 REST API 92
5.9.4 优点 93
5.9.5 弱点 93
5.10 比较 93
5.11 编写模块化代码 95
5.12 用户选择 95
5.13 总结 95
第6章 深入了解Connect和Express 96
6.1 Connect 96
6.1.1 创建Connect程序 97
6.1.2 了解Connect中间件的工作机制 97
6.1.3 组合中间件 98
6.1.4 中间件的顺序 98
6.1.5 创建可配置的中间件 99
6.1.6 使用错误处理中间件 101
6.2 Express 103
6.2.1 生成程序框架 103
6.2.2 Express和程序的配置 107
6.2.3 渲染视图 109
6.2.4 Express路由入门 113
6.2.5 用户认证 120
6.2.6 注册新用户 124
6.2.7 已注册用户登录 130
6.2.8 用户加载中间件 133
6.2.9 创建REST API 134
6.2.10 启用内容协商 140
6.3 总结 142
第7章 Web程序的模板 143
7.1 用模板保持代码的整洁性 143
7.2 Embedded JavaScript的模板 147
7.2.1 创建模板 148
7.2.2 将EJS集成到你的程序中 149
7.2.3 在客户端程序中使用EJS 150
7.3 使用Mustache模板语言与Hogan 151
7.3.1 创建模板 151
7.3.2 Mustache标签 151
7.3.3 微调Hogan 154
7.4 用Pug做模板 154
7.4.1 Pug基础知识 155
7.4.2 Pug模板中的逻辑 157
7.4.3 组织Pug模板 159
7.5 总结 163
第8章 存储数据 164
8.1 关系型数据库 164
8.2 PostgreSQL 164
8.2.1 安装及配置 164
8.2.2 创建数据库 165
8.2.3 从Node中连接Postgres 165
8.2.4 定义表 166
8.2.5 插入数据 166
8.2.6 更新数据 166
8.2.7 查询数据 167
8.3 Knex 167
8.3.1 查询构建器 168
8.3.2 用Knex实现连接和查询 168
8.3.3 切换数据库 170
8.3.4 注意抽象漏洞 171
8.4 MySQL和PostgreSQL 171
8.5 ACID保证 172
8.5.1 原子性:无论成败,事务必须整体执行 172
8.5.2 一致性:始终确保约束条件 172
8.5.3 隔离性:并发事务不会相互干扰 172
8.5.4 耐用性:事务是永久性的 173
8.6 NoSQL 173
8.7 分布式数据库 173
8.8 MongoDB 174
8.8.1 安装和配置 174
8.8.2 连接MongoDB 174
8.8.3 插入文档 175
8.8.4 查询 176
8.8.5 使用MongoDB标识 177
8.8.6 使用复制集 178
8.8.7 了解写关注 180
8.9 键/值存储 181
8.10 Redis 181
8.10.1 安装和配置 182
8.10.2 初始化 182
8.10.3 处理键/值对 183
8.10.4 处理键 184
8.10.5 编码与数据类型 184
8.10.6 使用散列表 186
8.10.7 使用列表 186
8.10.8 使用集合 187
8.10.9 用频道实现发布/订阅功能 188
8.10.10 提升性能 189
8.11 嵌入式数据库 189
8.12 LevelDB 190
8.12.1 LevelUP与LevelDOWN 190
8.12.2 安装 191
8.12.3 API概览 191
8.12.4 初始化 191
8.12.5 键/值编码 192
8.12.6 键/值对的读写 192
8.12.7 可插拔的后台 193
8.12.8 模块化数据库 194
8.13 昂贵的序列化和反序列化 195
8.14 浏览器内存储 196
8.14.1 Web存储:localStorage和sessionStorage 196
8.14.2 值的读写 197
8.14.3 localForage 199
8.14.4 读和写 199
8.15 存储托管 200
8.16 选哪个数据库 201
8.17 总结 201
第9章 测试Node程序 202
9.1 单元测试 203
9.1.1 assert模块 203
9.1.2 Mocha 206
9.1.3 Vows 211
9.1.4 Chai 213
9.1.5 Should.js 214
9.1.6 Sinon.JS的探测器和存根 216
9.2 功能测试 218
9.3 处理失败的测试 221
9.3.1 获取更详细的日志 221
9.3.2 更好的栈跟踪 223
9.4 总结 224
第10章 Node程序的部署及运维 225
10.1 安置Node程序 225
10.1.1 平台即服务 226
10.1.2 服务器 227
10.1.3 容器 228
10.2 部署的基础知识 229
10.2.1 从Git库部署 229
10.2.2 保证Node不掉线 230
10.3 在线时长和性能的最大化 231
10.3.1 用Upstart保证在线时长 232
10.3.2 集群API:充分利用多核处理器 233
10.3.3 静态文件及代理 235
10.4 总结 236
第三部分 超越Web开发
第11章 编写命令行程序 238
11.1 了解惯例和理念 238
11.2 parse-json 239
11.3 使用命令行参数 239
11.3.1 解析命令行参数 239
11.3.2 验证参数 240
11.3.3 将stdin作为文件传递 241
11.4 用npm分享命令行工具 242
11.5 用管道连接脚本 243
11.5.1 将数据通过管道传给parse-json 243
11.5.2 处理错误和退出码 243
11.5.3 在Node中使用管道 245
11.5.4 管道与命令的执行顺序 246
11.6 解释真正的脚本 247
11.7 总结 247
第12章 用Electron征服桌面 248
12.1 认识Electron 248
12.1.1 Electron的技术栈 249
12.1.2 界面设计 250
12.2 创建一个Electron程序 250
12.3 搭建完整的桌面端程序 252
12.3.1 引导React与Babel 253
12.3.2 安装依赖项 253
12.3.3 设置Webpack 254
12.4 React程序 255
12.4.1 定义Request组件 256
12.4.2 定义Response组件 258
12.4.3 React组件之间的通信 261
12.5 构建与分发 261
12.5.1 用Electron打包器构建程序 261
12.5.2 打包 262
12.6 总结 263
附录A 安装Node 264
附录B 自动化的网络抓取 267
附录C Connect的官方中间件 277
术语表 307
· · · · · ·
作者简介
亚历克斯•杨(Alex Young)
经验丰富的Web开发者,广受欢迎的JavaScript社区DailyJS创始人。目前任职于Apple。另著有《Node.js硬实战》。
布拉德利•马克(Bradley Meck)
TC39和Node.js基金会成员。业余时间醉心于为JavaScript制作工具、园艺和指导学生。
麦克•坎特伦(Mike Cantelon)
Node.js核心框架贡献者,Node社区活跃分子,培训师和演讲人。
蒂姆•奥克斯利(Tim Oxley)
JavaScript(Node.js/React)自由撰稿人。
马克•哈特(Marc Harter)
Node.js核心框架贡献者。
T.J.霍洛瓦丘(T.J.Holowaychuk)
参与开发了很多Node.js模块,包括流行的Express框架。
内森•拉伊利赫(Nathan Rajl...
(展开全部)
精彩摘录
onceadevelopmentneedhasbeenidentified,thecommunitygenerallyself-organizestotakecareofit.
——引自第6页
Nodeisalsohugeonstreamsandstreaming.Youcanthinkofstreamslikearraysbutinsteadofhavingdatadistributedoverspace,streamscanbethoughtofasdatadistributedovertime.Bybringingdatainchunkbychunk,thedeveloperisgiventheabilitytohandlethatdataasitcomesininsteadofwaitingforitalltoarrivebeforeacting.Here'showwewouldstreamresource.json:
——引自第15页