产品特色
编辑推荐
《Node.js实战(第2季)》作者来自CNode社区点击率颇高、粉丝数万的《一起学node.js》。《Node.js实战(第2季)》没有成为教条式的入门级别,而是真正进入Node.js实战层次。
《Node.js实战(第2季)》在《Node.js实战(双色)》的基础上增加了实战案例的难度,并结合了当下的热门应用,增加了对原理、代码的细节讲解。
《Node.js实战(第2季)》与《Node.js实战(双色)》配套学习,可迅速开阔视野、提升开发技能、增加实战实力。
《Node.js实战(第2季)》是经读者强烈呼吁而诞生的,作者绞尽脑汁,就是为了让读者在阅读后大呼过瘾!
内容简介
《Node.js实战(第2季)》通过7个实例分别讲解了Node.js在实战开发中的应用,这些章节既涉及Docker、Koa 等全新技术,也涉及OAuth2、命令行工具、消息队列、单元测试、编写C/C++模块等实战中经常会遇到的问题和应用场景。本书章节大体按照从简单到复杂的难度编排,每一章都通过一个实例指引读者从头开发一个Node.js应用,让读者循序渐进地学习Node.js,以及在实战开发中的编程技巧。本书不但着重讲解了每个实战案例所涉及的基础知识、思路和方法,也详细解释了源码的关键部分,希望有利于读者的学习和理解。
《Node.js实战(第2季)》适合有一定Node.js基础及服务器端开发基础的读者阅读,也适合想了解Node.js可以做什么、想迅速上手实践的读者阅读。
作者简介
吴中骅,现于同程旅游担任系统架构师,也负责在同程旅游开展Node.js项目,非常享受Node.js的高性能和异步带来的编程愉悦感。
雷宗民,一登后台开发工程师,2011年6月开始接触Node.js,从此开始各种折腾与造轮子。
赵坤,现于北京红树岛信息科技有限公司工作,热爱互联网,崇尚开源精神。2013年偶遇Node.js,相见恨晚,从此开始一条Node.js不归路。
刘亚中,GitHub发烧友、Node.js源码贡献者,以Node.js Ninja身份先后参与国内外多个创业项目如Pixbi、Fireball、WeFlex、51Degrees等,并参与维护其中的部分开源项目。
目录
第1章 通过Docker快速发布Node.js应用/ 1
1.1 什么是Docker /1
1.2 Nginx作为Node.js前端Web Server的作用 /3
1.3 安装Docker和下载Images镜像/ 5
1.4 Docker常用命令 /8
1.5 启动Container盒子 /10
1.6 文件卷标加载/ 11
1.7 将多个Container盒子连接起来 /13
1.8 不要用SSH连接到你的Container盒子 /15
1.9 配置DockerImages镜像和发布应用/ 19
1.10 什么是Jenkins/ 26
1.11 通过Docker安装和启动Jenkins /28
1.12 配置Jenkins并自动化部署Node.js项目/ 29
1.13 小结/ 36
1.14 参考文献/ 37
第2章 开发OAuth2认证服务器 /38
2.1 本章所用到的第三方模块/ 38
2.2 REST风格的API/ 39
2.3 定义返回数据格式/ 40
2.4 实现简单的API/ 41
2.4.1 扩展Response对象/ 41
2.4.2 统一处理出错信息/ 43
2.4.3 实现简单的API/ 43
2.4.4 API版本/ 44
2.5 关于OAuth认证/ 45
2.5.1 OAuth 2.0授权流程/ 45
2.5.2 OAuth 2.0授权详解/ 45
2.5.3 定义授权接口/ 48
2.6 实现OAuth认证/ 48
2.6.1 OAuth2/authorize接口/ 48
2.6.2 OAuth2/access_token接口/ 52
2.6.3 在处理API请求前验证Access Token/ 55
2.6.4 Access Token过期的问题/ 56
2.7 实现API客户端/ 58
2.8 API传输过程中的安全问题/ 62
2.9 API请求频率限制/ 63
2.10 让API返回结果支持不同的格式/65
2.10.1 通过后缀来指定返回的数据格式/ 65
2.10.2 通过Accept请求头来指定返回的数据格式/ 67
2.11 生成随机的测试数据/ 68
2.12 小结/ 69
2.13 参考文献及开源项目/ 70
第3章 基于RabbitMQ搭建消息队列/ 72
3.1 什么是消息队列,消息队列的优势/72
3.2 安装和启动RabbitMQ /75
3.3 RabbitMQ的Hello World/ 76
3.4 RabbitMQ的工作队列/80
3.5 RabbitMQ的PUB/SUB队列/ 84
3.6 RabbitMQ的队列路由 /89
3.7 RabbitMQ的RPC远程过程调用/ 94
3.8 基于RabbitMQ的Node.js和Python通信实例/ 99
3.9 RabbitMQ方案和HTTP方案的对比 /103
3.10 小结/ 117
3.11 参考文献 117
第4章 编写命令行工具——打造一个静态博客系统/ 118
4.1 本章所使用到的第三方模块/ 119
4.2 命令格式/ 120
4.2.1 常见的命令格式/ 121
4.2.2 定义静态博客命令格式/121
4.3 编写命令行工具/ 122
4.4 实时预览/ 126
4.4.1 启动Web服务器 /127
4.4.2 渲染文章页面/ 128
4.4.3 文章元数据/ 131
4.4.4 增加模板/ 132
4.4.5 渲染文章列表/ 136
4.5 生成静态博客/ 140
4.6 配置文件/ 146
4.7 创建空白博客模板/ 150
4.8 一些有用的第三方服务/ 153
4.8.1 评论组件/ 153
4.8.2 分享组件/ 154
4.9 小结/ 155
4.10 参考文献/ 156
第5章 基于Koa快速开发Web应用/ 157
5.1 ES6时代的来临/ 157
5.1.1 function和function*/ 158
5.1.2 yield和yield*/ 1605.1.3 co和Koa/ 162
5.2 模板系统/ 170
5.2.1 ejs和co-ejs/ 170
5.2.2 过滤器/ 173
5.3 路由/ 173
5.4 参数验证与错误处理/ 175
5.4.1 koa-scheme /175
5.4.2 koa-errorhandler/ 178
5.5 缓存和配置/ 182
5.5.1 koa-router-cache和co-cache /182
5.5.2 config-lite/ 184
5.6 测试/ 184
5.6.1 单元测试/ 184
5.6.2 co-mocha和co-supertest 185
5.7 开发一个论坛系统/ 189
5.7.1 基础项目搭建/ 189
5.7.2 路由和功能设计/ 193
5.7.3 自定义模型/ 194
5.7.4 theme的设计/ 200
5.7.5 注册/ 206
5.7.6 登录与登出/ 213
5.7.7 主页与版块/ 216
5.7.8 用户页/ 221
5.7.9 发表页与话题页/ 222
5.7.10 测试/ 228
5.7.11 部署 231
5.8 小结/ 233
5.9 参考文献/ 233
第6章 Node.js测试服务搭建 /235
6.1 概述/ 235
6.1.1 目的/ 2356.1.2 Pixbi/ 236
6.2 搭建后端测试服务/ 238
6.2.1 单元测试/ 239
6.2.2 功能性测试/ 259
6.2.3 可拓展性测试/ 260
6.3 搭建前端测试服务/ 261
6.3.1 PhantomJS/ 262
6.3.2 BrowserStack/ 266
6.3.3 Adobe CEP(Common Extensibility Platform)/269
6.4 加入持续集成工作流/ 271
6.5 小结/ 274
6.6 参考资料/ 276
第7章 使用Node.js绑定C语言库——51Degrees.node /277
7.1 开发背景/ 277
7.2 预备知识/ 279
7.2.1 51Degrees-C /279
7.2.2 C/C++中的Node.js API/ 282
7.2.3 使用nan/ 284
7.3 编码/ 285
7.3.1 项目初始化/ 285
7.3.2 创建v8胶水层接口/ 286
7.3.3 创建JavaScript代码/ 293
7.4 构建与发布/ 294
7.4.1 node-gyp与binding.gyp/ 294
7.4.2 发布/ 296
7.5 如何从nan 1.x升级到nan 2.x /296
7.6 后记/ 298
前言/序言
自本书第1季《Node.js实战(双色)》出版以来,JavaScript界又发生了许多重大事件:React.js和AngularJS 2.0相继出现;ES6于2015年年中正式定稿;io.js从Node.js社区中分裂出来,后又与其合并。截至本书出版时,npm上有接近18万的模块,是去年同期的3倍,周下载量接近5.6亿次,是2014年同期的10倍。越来越多的创业公司和大公司都不同程度地使用了Node.js, Node.js已经成为一门成熟、稳定且具有独特魅力的技术。
延续《Node.js实战(双色)》的写作思路,本书不会从头讲解Node.js是什么,而是面向有一定Node.js基础的读者,建议读者把本书当作入门与进阶之间的过渡书籍来阅读。本书通过7个实例来讲解Node.js在不同场景下的应用,通过阅读本书,读者可以快速熟悉并使用Node.js进行开发。本书由4位作者共同编写,其中吴中骅完成了第1、3章的创作,雷宗民完成了第2、4章的创作,赵坤完成了第5章的创作,刘亚中完成了第6、7章的创作。
第1章主要介绍了如何使用Docker快速发布一个Nginx+Express+Redis项目,然后使用Jenkins进行简单的持续集成发布工作,其中介绍了Docker的基础概念、用法和Jenkins的安装配置方法。
第2章介绍了当前比较流行的OAuth2认证。OAuth2认证是当API服务器对外提供服务时,验证API使用者权限的有效的认证方式。本章主要介绍了使用Node.js搭建一个基本的API服务器所涉及的组件、方法和技术细节。
第3章主要介绍了如何在Node.js中使用消息队列软件RabbitMQ来解决Web服务器或应用服务器间的通信问题。对于服务器间的跨语言通信,以前一般采用XMLRPC方式,而现在比较流行采用HTTP的RESTful方式,使用RabbitMQ能够很灵活地处理这些事情。
第4章以一个静态博客系统构建工具作为实例,介绍如何使用Node.js的commander模块来编写一个命令行工具。
第5章介绍了ES6中生成器、yield,以及Node.js下一代Web开发框架Koa及其中间件的用法,最后通过搭建一个简单的论坛系统,让读者从实践中学习如何基于Koa快速开发Web应用。
第6章分享了作者在一家时尚杂志相关的互联网创业团队工作的部分经历:为该团队搭建一套较基础的Node.js测试服务,测试范围涵盖服务器、浏览器、Mag+、Adobe InDesign等平台。希望读者通过这个分享能够找到一种更为全面的方式去保证项目代码的质量。
第7章分享了作者与51Degrees团队远程工作的细节,可以让读者大致了解如何将一个已有的C/C++代码库拓展到Node.js平台上进行使用。
感谢电子工业出版社博文视点张国霞编辑的热心帮助和指导;感谢神猪、河蟹、AKI、何翊宇(dead_horse)、Kenneth Kan、Baptiste Gaillard、Jorn Zaefferer和Fish对本书的校验;再次感谢何翊宇为本书慷慨作序。
如果您对本书有任何评论或建议,可加入本书官方QQ群(156627943)进行讨论,或者到读者反馈网站http://nodejs.ucdok.com进行反馈,真诚欢迎您的意见与反馈。
Node.js 实战(第 2 季):精进你的服务器端 JavaScript 技能 在飞速发展的 Web 开发领域,Node.js 已成为不可或缺的强大工具。它凭借其独特的非阻塞、事件驱动的 I/O 模型,为构建高性能、可伸缩的后端应用程序提供了前所未有的机遇。如果您已经掌握了 Node.js 的基础知识,并渴望深入挖掘其更高级的特性和最佳实践,那么《Node.js 实战(第 2 季)》将是您不可错过的进阶之选。本书并非 Node.js 的入门教程,而是建立在您已有一定 Node.js 基础之上,旨在帮助您成为一名更熟练、更高效的 Node.js 开发者。 本书核心价值:从“能用”到“精通”,赋能复杂场景下的 Node.js 开发 《Node.js 实战(第 2 季)》将带领您走出 Node.js 的舒适区,探索那些能够显著提升应用性能、可维护性和稳定性的核心概念和技术。我们不仅仅介绍 API,更注重理解其背后的原理,让您能够根据实际业务需求,做出更明智的技术决策。本书将聚焦于以下几个关键领域: 一、 深入理解 Node.js 核心机制:构建坚实的技术基石 深入 V8 引擎: Node.js 的强大离不开 V8 JavaScript 引擎。本书将带您领略 V8 的内部工作原理,包括其垃圾回收机制、事件循环的精妙之处,以及如何通过理解这些底层机制来优化您的代码性能。您将了解 JavaScript 代码如何在 V8 中被编译、执行,以及内存管理是如何工作的,从而避免常见的性能陷阱。 事件循环与非阻塞 I/O 的精髓: 尽管您可能已经在使用 Node.js,但对事件循环的深刻理解是成为高级开发者的关键。本书将详细解析事件循环的各个阶段(timers, I/O callbacks, check, close callbacks),以及 libuv 在其背后的作用。您将学习如何利用这些知识来编写真正高效、响应迅速的应用程序,并理解为什么 Node.js 在 I/O 密集型任务中表现出色。 模块系统与加载机制: Node.js 的模块化设计是其灵活性的重要体现。本书将深入探讨 CommonJS 和 ES Modules 在 Node.js 中的支持和应用,以及它们之间的兼容性问题。您将学习如何构建清晰、可维护的代码结构,以及如何有效地管理依赖,避免潜在的冲突。 异步编程的艺术: 回调函数、Promise、async/await,异步编程是 Node.js 的灵魂。本书将为您梳理异步编程的演进历程,并深入讲解 Promises 和 async/await 的高级用法,包括错误处理策略、并行与串行执行的权衡,以及如何构建更易于理解和维护的异步代码流。您将学会如何优雅地处理复杂的异步操作,而不会陷入“回调地狱”。 二、 构建健壮、可伸缩的后端服务:应对生产环境的挑战 高性能 Web 服务器开发: 从零开始构建一个高效的 Web 服务器是本书的重要实践环节。您将学习如何利用 Node.js 的内置 `http` 模块,结合 Express.js 等框架,构建具有路由、中间件、请求/响应处理能力的 Web 应用。本书将深入讲解路由策略、中间件设计模式,以及如何实现 RESTful API。 API 设计与最佳实践: 设计良好的 API 是构建可维护、可扩展系统的基石。本书将探讨 RESTful API 的设计原则,包括资源命名、HTTP 方法的使用、状态码的正确运用,以及版本控制策略。您将学习如何设计出既易于使用又易于扩展的 API 接口。 数据库集成与优化: 现代 Web 应用离不开数据库。本书将重点介绍如何高效地与主流数据库(如 PostgreSQL, MongoDB)进行集成。您将学习如何使用 ORM/ODM 库(如 Sequelize, Mongoose)来简化数据库操作,并深入探讨数据库连接池、查询优化、索引策略等关键技术,以确保数据库访问的性能和稳定性。 身份验证与授权: 安全是任何后端服务的生命线。本书将详尽讲解 JWT (JSON Web Tokens) 的原理与实现,以及如何构建安全的身份验证和授权机制。您将学习如何保护您的 API 免受未经授权的访问,并实现基于角色的访问控制。 错误处理与日志记录: 健壮的应用离不开完善的错误处理和日志记录机制。本书将指导您如何设计统一的错误处理策略,以及如何利用日志记录工具(如 Winston, Pino)来捕获、分析和诊断生产环境中的问题,从而快速定位和解决故障。 三、 提升应用性能与稳定性:应对高并发与复杂负载 性能调优与瓶颈分析: 了解如何识别和解决性能瓶颈至关重要。本书将介绍各种性能分析工具(如 Node.js 的内置 profiler, Chrome DevTools),以及如何运用它们来定位 CPU 密集型或 I/O 密集型代码,并提供针对性的优化建议。 进程管理与集群: Node.js 的单进程模型在处理 CPU 密集型任务时可能成为瓶颈。本书将深入讲解 Node.js 的 `cluster` 模块,教您如何利用多核 CPU 来提升应用的吞吐量。您将学习如何管理多个 Node.js 进程,以及如何实现负载均衡。 缓存策略与实现: 缓存是提升应用性能的利器。本书将介绍内存缓存(如 Redis, Memcached)的应用场景和实现方法,以及如何设计有效的缓存策略,以减少数据库压力,加速响应时间。 消息队列与异步通信: 在分布式系统中,消息队列扮演着至关重要的角色。本书将介绍 RabbitMQ, Kafka 等消息队列的工作原理,以及如何将它们集成到 Node.js 应用中,实现异步通信、解耦服务,提高系统的弹性和可伸缩性。 高可用性与容错设计: 构建高可用的服务是生产环境部署的关键。本书将探讨熔断、降级、重试等容错机制,以及如何利用这些技术来提高应用的鲁棒性,确保在面对部分服务故障时,系统仍能保持运行。 四、 现代化 Node.js 开发实践:拥抱前沿技术趋势 TypeScript 的应用: 随着项目规模的增长,静态类型检查成为提高代码质量和可维护性的有效手段。本书将深入讲解如何在 Node.js 项目中集成和使用 TypeScript,包括类型定义、接口、泛型等,帮助您构建更健壮、更易于协作的代码。 容器化与部署: Docker 已成为现代应用部署的标准。本书将指导您如何将 Node.js 应用打包成 Docker 镜像,以及如何在 Docker 容器中运行和管理您的应用。您还将初步了解 Kubernetes 等容器编排技术,为后续的云原生部署打下基础。 测试驱动开发(TDD)与单元测试: 编写高质量的测试是保证代码质量的有效方式。本书将介绍 Jest, Mocha 等主流测试框架,以及如何编写单元测试、集成测试,并讲解测试驱动开发的流程,帮助您构建信心十足的代码。 DevOps 与 CI/CD: 自动化是现代软件开发的趋势。本书将初步探讨 DevOps 的理念,以及如何结合 CI/CD 管道(如 Jenkins, GitHub Actions)来实现代码的持续集成与持续部署,从而提高开发效率和交付速度。 本书适合读者 已经掌握 Node.js 基础语法和常用模块,并希望深入理解其底层原理的开发者。 负责构建高性能、可伸缩后端服务的团队成员。 希望提升 Node.js 应用的安全性、稳定性和可维护性的开发者。 对 TypeScript、Docker、消息队列等前沿技术感兴趣,并希望将其应用于 Node.js 开发的开发者。 有志于成为一名优秀的 Node.js 架构师或技术专家的开发者。 《Node.js 实战(第 2 季)》不仅仅是一本书,更是一份通往 Node.js 精通之路的路线图。它将帮助您克服挑战,掌握更高级的技术,构建更出色的 Web 应用。无论您是初露锋芒的新手,还是经验丰富的开发者,本书都将为您提供宝贵的知识和实用的技能,助您在 Node.js 的开发领域更上一层楼。让我们一起踏上这场精彩的 Node.js 实战之旅吧!