《新时期的Node.js入门》代码下载、简介与前言

本书代码下载:https://github.com/Yuki-Minakami/BookExample,请免费下载代码学习。

内容简介

Node.js是一门开源的、为Web而生的语言,具有高并发、异步等特点,并且拥有一个十分活跃的开发者社区。与Ruby、Python等语言相比,Node.js更年轻、更易于没有经验的人上手使用,因此很快在世界各地的开发者中收获了一大批拥趸。在国内,Node.js在许多企业中获得了广泛应用,并取得了一系列的应用成果。然而,随着技术的不断更新、ECMAScript2015等新标准纷纷确定,现有的中文书籍就变得有些过时。本书立足于新的技术潮流,介绍了一系列全新的语言特性和标准,以便让读者在学习基础知识的同时紧跟新技术的发展。

本书分为8章6个附录,讲解了Node.js的各种基础特性,使读者快速入门,同时结合语言最新的发展趋势,让读者能够紧跟技术潮流。本书围绕Node.js在Web站点开发和爬虫系统中的应用展开,对Node.js在大型项目中的定位与应用做了详细的说明。

本书可用于Node.js入门,适合未接触过Node的读者以及在校的学生阅读,也适合作为高等院校和培训学校相关专业的师生教学参考。


前    言

国内Node的开发者很多都读过朴灵写的《深入浅出Node.js》(以下简称《深入浅出》)一书,笔者也不例外,笔者在2014年初第一次接触Node,最初读的几本书就包含了这本《深入浅出》,该书出版于2013年12月,距今已经差不多有4年的时间了。

对于一门高速发展的语言来说,4年算得上很长的时间了。4年前Node的版本号还在0.10.x,而时至今日,已经迎来v8.0.0的最新版本了。

Node项目始于2009年,2013年恰好处在当今(2017年)和2009年的中间节点,一门语言在诞生之初的发展总是最快的,到了现在,Node逐渐地变得稳定下来。

但即使这样,这4年中也发生了不少大事件:Node从分裂又走向了统一,ES2015标准的推出等。

那么4年后的今天,Node有了哪些改变呢?

一方面,基本的概念几乎没有改变,底层的libuv和事件循环还是原来的样子,主要模块的API也没什么大的变化。

另一方面,变动最多的大概是语法了,ECMAScript沉寂数年之后,终于推出了重量级的新版本ES2015,并且计划每年发布一个新版本。

换个角度来说,如果现在有一份使用Node最新版本写的代码,拿给还在使用0.10的开发者看,最大可能是对里面各种奇怪的关键字和语法感到疑惑。这本身就说明了Node发生了如此大的变动。

在笔者看来,Node的发展进入了平台期,这意味着在一段时间内,Node将维持现有的模样,或许会增加或修改一些语法,底层的V8也可能做一些大幅度的改进,但代码的基本结构不会有大的变动。

Node的发展大致分为几个阶段: 

? 第一个阶段:从诞生到分裂,大致5年的时间。

? 第二个阶段:从与io.js合并到ES2015标准正式落地,只有不到半年的时间。

? 第三个阶段:从v6.0.0全面支持ES2015至今,Node较大的更新都是围绕着新的ECMA201x标准展开的。

所有的新与旧都是相对的,虽然在目前来看,本书记述的内容还算是比较新的,无论是ES201x的使用,还是Koa2框架的介绍,都属于同类书中较少涉及的领域,但要是再过几年的时间,本书的内容也会变得过时。

本书定位

关于本书的定位,笔者着实费了很大的脑筋,出版社老师建议我写一本入门书,当我知道的时候其实内心是很犹豫的:一方面,Node的入门书籍市面上已经很多了,随便翻开一本,不论是里面的内容还是章节编排都大同小异;另一方面,入门书反而是最难写出水平的,因为作者们大多已经有了相关领域的编程经验,那样就很难站在入门者的角度来进行写作。

经过考虑之后,我决定写一本《新时期的Node.js入门》,一方面能够让本书立足于最新的技术潮流,另一方面对于ES201X又或者是Koa2来说,它们诞生的时间不长,笔者也不敢说自己对这些新的技术和标准已经有了丰富的编程经验(之前使用最多的还是ES5语法和Express),正好也能站在一个入门者的角度来审视这些新技术。

本书的定位是一本新时期的Node入门书,关于“新”在哪里?一方面是内容的“新”,新的标准已经出现,怎么能够停滞不前!ES2015带来了不少新的语言特性,它让之前需要花不少工夫才能解决的问题变得轻而易举。另一方面,本书不想重复介绍同类书籍已经反复介绍的内容,例如Express框架的使用,在市面上翻开任意一本Node的入门书籍,都会不厌其烦地向读者教授Express的各种用法,作为代替,本书推荐了Koa这一框架作为入门介绍,它更贴近新标准。

除了“如何使用”之外,本书还会兼顾Node底层的原理,读者大可在第一遍时跳过这些内容,当对Node有了一个大概的掌握后,会自然而然地想去了解其背后的原理。

关于本书内容

本书不是一本ES2015或者更新标准的说明书,也不想让内容停留在介绍各种模块的API罗列上。 

第1章讲解Node的运行机制,主要是底层的一些实现和通用的原理,可能需要一些操作系统的知识。

第2章介绍了通用的模块和使用方法,是真正的入门章节。

第3章专注于新的ECMAScript标准以及Node对其的支持。

第4章主要介绍如何更好地组织和书写异步代码,采用循序渐进的方式介绍了各种解决方案的优劣之处。

第5章使用Koa2框架来开发一个Web应用,涉及Web开发的各方面,例如路由处理、Session、页面渲染、数据存储等。

第6章介绍了如何使用Node来开发一个爬虫系统。

第7章介绍常用的测试方法以及调试Node应用的技巧。

第8章介绍了Node中错误处理的相关知识。

附录A介绍进程、线程和协程的概念,属于拓展的背景知识。

附录B Lua语言简介,Lua几乎可以认为是某些概念的最佳实现,例如协程。

附录C从零开发了一个玩具式的Web框架,可以认为是对Koa的一个简单模仿,对于初学者来说,这应该是一个理解Node Web原理的好方法。

附录D MongoDB和Redis简介。

附录E使用Docker来实现虚拟化。

附录F介绍了使用npm来进行包管理的一些小技巧。

本书的每个章节都是环环相扣的,每一章讲述的内容都多多少少地被其他章节使用到,建议读者循序渐进地阅读(第1章可以放到最后)。

循序渐进不仅仅体现在章节安排上,在系统的实现上也是如此,以第6章爬虫的开发为例,从糟糕的代码设计开始,一步步地进行改进,最后达到比较完善的状态。

那些糟糕的代码大部分都是在笔者还是初学者时写的,笔者很庆幸自己还能留着这些代码,它们不仅见证了笔者本人对Node的认识过程,也见证了Node的发展历史。

关于本书中的代码

所有的源代码都可以在https://github.com/Yuki-Minakami/BookExample上找到,它们都经过了充分的测试。

本书中,除了Node编写的示例代码外,还会穿插一些其他语言(例如Java)的代码,这是为了通过和其他语言的对比让读者更好地理解Node中的特性。

笔者使用的电脑环境为 Mac OSX 10.11,本书中出现的代码绝大多数都是平台无关的,有一些代码在Windows环境下运行会出现问题或者不能在Windows下运行,本书也做了相应的标注和提示。读者在阅读本书的时候,也建议打开自己的电脑,第一时间把代码写在文本编辑器或者IDE中。

本书面向的读者

就像标题所说的,本书是一本入门书,适合在校的学生以及未接触过Node的读者阅读。如果读者有其他语言(例如Java)的编程经验,那么读起来可能会轻松一些,如果有使用JavaScript的经验就再好不过了。

如何学习Node

学习一门编程语言的最好办法,就是将其运用在实际的项目当中,但对于大多数开发者,尤其是自己目前的工作与Node无关时,想找到合适的项目并不容易,大多数人做的还只是非常简单的个人项目,例如一个TODO List,复杂一点的比如一个博客网站,这些都算不上什么复杂的项目,从里面得到的经验也少得可怜。

那些能处理高并发、拥有各种多进程架构的项目不是每个人都有机会做,那么到哪里去找有一些难度的Node项目练手呢?

那就只能把目光投向GitHub了,使用GitHub的搜索功能来寻找一些企业级的Node应用,如果感兴趣的话就试着提交代码,为开源项目贡献代码通常是一个不错的加分项。

虽然有点王婆卖瓜,但笔者认为本书第7章的项目还是有一定的复杂度的,针对多进程和分布式的扩展还有很大的想象空间,读者可以借助GitHub参与到共同开发上来。

名称约定

为了便于区分,JavaScript在本书中特指对ECMAScript的实现,除非特别注明,那么它代表了ES5的标准,并且同时适用于浏览器JavaScript和Node。当有些代码和概念特指在浏览器端运行的JavaScript时,我们一律使用“前端JavaScript”来称呼。

当使用ECMAScript这一称谓(例如ES2017)时,大多数是谈论标准内容,不涉及具体的实现。

纠错

笔者毕竟能力有限,在出版本书的时候可能有没有注意到的错误,例如代码运行出错、概念上的不正确等,如果读者有相关的发现,请以“××章××小结代码/内容错误”为标题发邮件至笔者的邮箱likaiboy_2012@126.com。 

致谢

首先要特别感谢的是出版社的夏毓彦编辑,是他让我有机会梳理迄今为止对Node的心得,然后得以出版。 

另一方面还要感谢我的母亲,当我第一次将自己准备写书的想法告诉她时,不出意外地,她开始怀疑起我的水平来,“就你还想出书?可不要误人子弟啊”。

正是这句话,不断提醒我对内容进行反复修改和验证。因为我意识到这和平时的博客文章不同,是更加严肃,并且对错误的容忍更低的作品。虽然她没有编程相关的经验,但我还是准备将第一本样书送给她,希望她能够阅读。

著者

2017年12月


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值