购买
下载掌阅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月 HbVXeGaTd7fH1FkKcdMSzjNdaIXXwk2BZpzCagl6xv9NNCV6SO/z2O9X5OXci4lN



第1章
概述

作为全书的开篇章节,本章主要介绍Node.js的运行环境,以及为了更好地进行开发和学习所需要的其他环境。 cZLhifstFvcKJaoPfEsN0qF3XklLxuRZi+TyEmuTBjDFBct1WB+MAhSgkRs0kr01



1.1 了解Node.js

在开始学习一门新技术之前,读者应当对它有些基本的了解。以下是官方对Node.js的定义:Node.js®是一个基于Chrome V8引擎的JavaScript运行时。

运行时即编程语言的运行环境,JavaScript从诞生起就属于浏览器的一部分,只能在浏览器内部运行。Node.js对其做了扩展,使得JavaScript可以直接运行在物理机器上,这意味着JavaScript可直接管理和控制物理机器的资源。

为了简化名称,本章及后续章节均将Node.js简称为Node。

Node的语法遵循ECMAScript标准,ECMAScript是由ECMA(European Computer Manufacturers Association,前身为欧洲计算机制造商协会)组织通过ECMA-262文件标准化的脚本程序设计语言,即JavaScript的语言标准。关于语言标准本身更加具体的内容,可以参考附录A。

Node在语法上和浏览器中的JavaScript是一致的。绝大部分与浏览器BOM(Browser Object Model,浏览器对象模型,如window对象)、DOM(Document Object Model,文档对象模型,如document对象)无关的JavaScript代码,都可以直接在Node中运行并且获得相同的输出。 cZLhifstFvcKJaoPfEsN0qF3XklLxuRZi+TyEmuTBjDFBct1WB+MAhSgkRs0kr01


// 下面的代码在浏览器和Node中有相同的输出 
function hello(){ 
      console.log("hello world"); 
} 
hello();  
// 输出 
"hello world" 
 
// 下面的JavaScript代码不能在Node中运行,因为它使用了DOM 
function getValue(){ 
     var x=document.getElementById("myHeader"); 
     alert(x.innerHTML); 
} 

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