Node.js 10 已经进入 LTS 时代!其应用场景已经从脚手架、辅助前端开发(如 SSR、PWA 等)扩展到 API 中间层、代理层及专业的后端开发。Node.js 在企业 Web 开发领域也日渐成熟,无论是在 API 中间层,还是在微服务中都得到了非常好的落地。本书将通过 Web 开发框架 Koa2,引领你进入 Node.js 的主战场! 本书系统讲解了在实战项目中使用 Koa 框架开发 Web 应用的流程和步骤。第 1 章介绍 Node.js 的安装、开发工具及调试。第 2 章和第 3 章介绍搭建 Koa 实战项目的雏形。第 4 章详细介绍 HTTP 基础知识及其实战应用。第 5 章介绍 MVC、模板引擎和文件上传等实用功能。第 6 ~ 8 章介绍数据库、单元测试及项目的优化与部署。第 9 ~ 13 章介绍从零开始搭建时下火爆的微信小程序前端及后台管理应用的全部过程,以及最终的服务器部署,包括 HTTPS、Nginx。 本书示例丰富、侧重实战,以完整的实战项目贯穿全部章节,并提供书中涉及的所有源码及部分章节的配套视频教程,将是前端开发人员立足新领域和后端开发人员了解 Node.js 并使用 Koa2 开发 Web 应用的得力助手。
Node.js 诞生于 2009 年,到本书出版时已经有近 10 个年头。它扩充了 JavaScript 的应用范围,使 JavaScript 也能像其他语言一样操作各种系统资源,因此,前端工程化开发的大量工具都开始运行在 Node.js 环境中。由于 Node.js 采用事件驱动、非阻塞 I/O 和异步输出来提升性能,因此大量 I/O 密集型的应用也采用 Node.js 开发。掌握 Node.js 开发,既能极大地拓宽前端开发者的技术知识面,也能拓展前端开发者的生存空间,从目前前端开发者越来越多的环境中脱颖而出。
由于 Node.js 仅提供基础的类库,开发者需要自主合理地设计应用架构,并调用大量基础类库来进行开发。为了提升开发效率和降低开发门槛,相关技术社区涌现出不少基于 Node.js 的 Web 框架。
Express 框架在 Node.js 诞生之初出现,并迅速成为主流的 Web 应用开发框架。在社区中,大量的第三方开发者开发了丰富的 Express 插件,极大地降低了基于 Node.js 的 Web 应用开发成本,同时也带动了大量的开发者选择使用 Express 框架开发 Web 应用。但 Express 框架采用传统的回调方式处理异步调用,对于经验不足的开发者来说,很容易将代码写成“回调地狱”,使开发的应用难以持续维护。在 ECMAScript 6 的规范中提出了 Generator 函数,依据该规范,Express 的作者 TJ Holowaychukhttps://github.com/tj巧妙地开发了 co 库https://github.com/tj/co,使开发者能够通过 yield 关键词,像编写同步代码一样开发异步应用,从而解决了“回调地狱”问题。2014 年,他基于 co 库开发了新一代的 Web 应用开发框架 Koa,用官方语言来描述这个框架就是“ next generation web framework for Node.js ”。
社区开发者为 Koa 开发了大量的插件,与 Express 相比,两者的处理机制存在根本上的差异。Express 的插件是顺序执行的,而 Koa 的中间件基于“洋葱模型”,可以在中间件中执行请求处理前和请求处理后的代码。ECMAScript 7 提供了 Async/Await 关键词,从语法层面更好地支持了异步调用。TJ Holowaychuk 在 Koa 的基础上,采用 Async/Await 取代 co 库处理异步回调,发布了 Koa 第 2 版(简称 Koa2 )。随着 Node 8 LTS ( Long Term Support,长期支持)的发布,LTS 版本正式支持 ECMAScript 7 规范,选择使用 Koa 开发框架开发的 Node.js Web 应用也越来越多,Koa 框架逐步取代了 Express 框架。 尽管目前 Koa 非常流行,但“纯天然”支持 ECMAScript 7 语法的 Node.js 8 在 2017 年 10 月才正式发布。目前,市面上介绍 Koa 的书籍几乎没有,大多介绍的是 Express 框架,本书可以说是第一本介绍 Koa 的书籍。本书从 Node.js 基础、HTTP、Koa 框架、数据库、单元测试和运维部署等方面全方位地介绍了应用开发所应具备的知识体系。通过阅读本书,读者可以了解 Node.js 开发的方方面面,减少实际开发中出现的问题。同时,本书的重点章节也提供了线上代码讲解和视频,读者可以在阅读本书的同时,结合线上代码讲解和视频,更容易地理解本书介绍的知识。
特别感谢杜珂珂、哈志辉、姜帅、李波、李益、盛瀚钦、田小虎、徐磊、闫萌、赵晨雪(排名不分先后)对线上培训音视频课程资源的开发和支持。
这部分介绍了开发 Koa 应用需要具备的预备知识,包括 Node.js 入门、遇见 Koa、路由和 HTTP 共 4 个章节。 在第 1 章中,介绍了 Node.js 的历史和发展过程,以及 Node.js 基础和环境准备。介绍了 NPM ( Node Package Manager,Node.js 的第三方包管理工具),通过该包管理工具,开发者能够方便地使用大量的第三方软件包。本章还介绍了微软公司推出的免费开发工具:Visual Studio Code 编辑器,以及如何使用该编辑器调试 Node.js 应用。 在第 2 章中介绍了 Koa 的发展历程和作为 Koa 核心技术的中间件。 在第 3 章中介绍了路由的概念,以及 Koa 中最流行的路由中间件 koa-router。 在第 4 章中介绍了 HTTP 的基础知识,以及 HTTP 的后续协议 HTTP/2 ;介绍了在 Node.js 中如何获取客户端传递来的数据,如何通过 koa-bodyparser 中间件获取请求中的 body 数据等。
这部分介绍了应用开发各个环节的知识,包含构建 Koa Web 应用、数据库、单元测试、优化与部署共 4 个章节。 在第 5 章中介绍了 MVC 架构、模板引擎、静态资源,以及如何输出 JSON 数据,如何通过 koa-multer 中间件上传文件等。 在第 6 章中介绍了数据库的概念和以 MySQL 为代表的关系型数据库,以及如何通过 ORM 类库操作 MySQL 数据库;介绍了以 MongoDB 为代表的非关系型数据库,以及如何在 Node.js 中操作 MongoDB ;介绍了以 Redis 为代表的新型缓存数据库,以及如何在 Node.js 中利用 Redis 实现 Session 持久化。 在第 7 章中介绍了 Chai 断言库,它用来检测单元测试过程中的结果是否符合预期;介绍了 Mocha 测试框架,使用该框架可以编写和运行单元测试代码;介绍了使用 SuperTest 工具测试 HTTP 服务,以及通过 Nock 库模拟 HTTP 服务请求响应;最后,介绍了 Nyc 工具,用以检查单元测试的覆盖率、提升代码质量。 在第 8 章中介绍了如何记录日志和统一捕获异常,以及如何输出自定义错误页;介绍了如何通过 PM2、Docker 启动应用,如何通过 CI 集成发布应用,如何通过 Nginx 提供 HTTPS 支持;介绍了如何利用日志等途径监控服务器运行情况,以及如何利用 PM2 提供的 Keymetrics 监控云服务器。
这部分通过介绍时下最流行的小程序开发,结合具体的相册小程序来说明如何开发一个完整的小程序,以及如何部署小程序。其中,汇总本书前面章节的知识介绍了小程序的功能模块、接口开发、小程序开发、管理后台开发和服务部署。 在第 9 章中介绍了小程序应具备的产品功能及如何开发小程序门户网站。 在第 10 章中介绍了小程序登录流程,扫码登录的逻辑和实现方式,小程序中用到的接口和后台管理系统需要的接口。具体包括如何通过中间件来鉴权,如何统一控制后台管理系统的权限,如何通过 Mongoose 来定义数据模型和访问、存储数据,如何使用 log4js 记录日志。 在第 11 章中介绍了开发微信小程序的流程,以及如何借助微信开发者工具开发小程序。 在第 12 章中介绍了开发后台管理系统的整体架构和设计思路,并提供了一套登录与鉴权的技术方案。 在第 13 章中介绍了小程序相关服务的线上部署过程,包括对数据库、Nginx、HTTPS、和 Koa 服务的部署,具体包括如何通过 Nginx 实现把多个域名解析到同一台云服务器上,如何通过 PM2 管理应用。
本书由陈达孚、金晶、干珺、张利涛、戴亮、周遥、薛淑英编写。本书涉及的技术知识点较多,作者团队成员虽竭力争取奉献好的作品以使技术得到更好的普及,但难免存在疏漏和不足,读者如有问题或建议,可以直接到 iKcamp 的 GitHub 上留言。本书源码也可前往 GitHub 上获取,地址为 https://github.com/ikcamp。本书部分内容配有视频,可前往 https://camp.qianduan.group/koa2/2/0/0 观看。