购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

前言

从Node.js(以下简称Node)诞生的2009年5月到现在已经11年了。站在当前的时间点,已经有些难以想象11年前的软件开发是什么样子。那时,SSH框架还是Web开发的标配,ECMAScript5即将发布,HTML5还看不到影子,GitHub上线运行不到一年,Chrome刚刚放出了测试版(当时很多人还在怀疑它是不是像宣称的那么快)。

随着计算机性能和软件开发技术的提升,很多实现起来比较困难或者看起来性价比不高的技术构想成为现实。例如,借助使用开源的JavaScript引擎创造了一个全新的JavaScript运行时,即Node.js。

使用Node代表着可以在Web开发中统一前后端开发的语言,这意味着节约了大量的开发和沟通成本,作为其中代表的MEAN(MongoDB+Express+Angular+Node)技术栈仍然保持流行。

很多高校的软件工程教学有这样的思维:真正的软件工程师就要多学习“形而上学”,如设计模式和软件工程理论,编程语言本身反而不那么重要,尤其是JavaScript这种近乎领域特定的语言,没有专门开设课程的必要。

在学生时代学习的编程语言会导致路径依赖,如果一名初创企业的架构师在学校里最拿手的是Java,那么他在选择技术栈的时候选择Spring解决方案的概率会更大。

作为一门编程语言,Node包含了过程式编程、面向对象及函数式编程的特性。即使已经过了11年,Node仍然处在快速发展中,并且不断从现有的编程语言中汲取更多优秀的思想。如果读者有过Java EE开发的经验,那么一定会被Node简洁的代码和配置吸引,如果Node是读者接触的第一门服务器编程语言,那么希望读者在了解Node之后,依然能把眼光投向其他的编程语言。

内容简介

从逻辑上看本书可以分为两个部分。第一部分是基础,包括第1~5章,介绍了Node作为JavaScript运行时的各种概念与使用方式,这部分的内容会和专门介绍JavaScript的书籍有重合部分。第二部分偏向于应用,包括第6~8章,介绍了Node在Web服务、桌面应用程序中的应用等。

第1章主要介绍了如何准备Node环境及为了更好地学习和编码需要的其他软件环境。对于编程经验丰富的开发者来说,这些都是理应掌握的技能;但对于很多入门者来说,正确进行软件的下载和安装有时也会成为一个挑战。

第2章介绍了npm作为Node项目构建工具的使用方法。

第3章介绍了JavaScript的基本语法。这部分的内容是为了之前没有接触过JavaScript的读者对语法本身有一个快速的了解。

第4章开始进入Node的世界,介绍Node中主要模块的使用与背后的原理。

第5章的重点放在异步代码的组织上,主要介绍了回调函数以及Promise对象的使用。

第6章详细介绍了Node在网络编程上的应用,包括原生HTTP模块及express框架的使用。

第7章的主要内容是Node在桌面开发领域的应用,主要介绍了Electron框架以及常见开发需求在其中的实现。

第8章介绍了测试和调试的基本技巧。

本书还有一部分的内容是以附录的形式存在的,正文章节主要介绍语言使用和编程技巧,附录则包含了一些编程语言底层的内容,如果读者能够完全理解附录中的内容,可以进一步加深对Node的理解。

附录A主要介绍了一些操作系统相关的基础概念,包括Node与JavaScript的关联与区别,以及操作系统的相关内容,包括进程和线程的基本知识。

附录B作为第6章的补充内容,重点介绍网络编程相关的基本概念,包括建立连接的过程,socket相关的知识等。

附录C从代码层面将Node与其他编程语言,包括C#和Java做了比较。

附录D介绍了容器技术,并将其运用在第6章提到的软件环境中。

在编写本书的时候,笔者时时刻刻在注意要从一个入门者的角度来介绍,务必兼顾到知识点的前因后果。但如果不断向下挖掘,这本书就会变得奇厚无比,甚至变成一本计算机导论的课本。因此,附录的基础知识也仅包含最低限度的内容,如果读者在阅读的过程中仍然有难以理解的名词或者概念,可以使用搜索引擎来获得答案。

软件环境与源代码

笔者使用一台操作系统为Windows 10的主机,绝大部分代码是在Windows环境下编写及运行的。笔者还有一部运行MacOS 10.12的Macbook,可以把它近似看作一个Linux环境,本书的代码也都经过了测试,可以在该环境下运行。

本书在示例选择上尽可能地让其贴近真实世界的使用场景,这是因为在学习语言的时候,尽管能够理解书上的例子,但如果意识不到自己写的代码和实际工程有任何的关联,这会挫伤学习的热情。

本书中出现的所有代码均可以在GitHub上下载,虽然笔者对代码进行了测试,但仍有可能存在遗漏之处,如果读者发现其中的错误,可以通过pull request或者邮件的方式告诉笔者。

编者2020年9月 2PTJEfwySFvQuQmt0H6ki61Qsz+AMTwON79oVj3a3/fTZQB+LupQnRchOwNM1VTN

点击中间区域
呼出菜单
上一章
目录
下一章
×