小白教小白入门Nodejs——以创建本地静态资源服务器为例子(全文1.3万字)

前言

我是一名刚刚接触Nodejs有3周左右的新手小白,经历了迷茫、困顿、挫败之后终于对Nodejs有了基础掌握,算是刚刚入门。 我想把我目前所掌握的Nodejs相关知识写成文章,巩固自己所学、为其他新手小白提供一点点Nodejs入门帮助。

关于我的知识背景,补充几点:

1、我原本是一名网页设计师,无任何后台编程经验,是最近几个月才自学的前端(Http5+CSS3+JS),对VUE、Webpack等最新的前端技术栈只是简单了解、并无任何实际经验。

2、在我成为网页设计师更早之前(大概10年前),我曾经是一名Flash动画设计与开发人员,10年前的AS3的编程经验为我现在学习JS和Nodejs提供了非常大的帮助。因为AS3是面对对象语言,所以我对类、面对对象、设计模式这些并不陌生。

言归正传,小白教小白入门Nodejs正式开始…

免责声明:本文中的知识点、讲解内容仅仅是我个人目前的理解,不敢保证100%都是正确的,仅供参考,同时欢迎批评指正。

环境搭建:Nodejs + VSCode + CNPM

1. Nodejs简介与安装

Nodejs官方对自己的介绍非常简单——Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。

Nodejs与网页JS的区别:

1、网页中的JS,是运行在浏览器环境下的JavaScript,他实际上是:ECMAScript标准 + WebAPI(DOM操作+Web事件)

2、Nodejs是运行在Chrome V8环境下的Javascript,他实际上是:ECMAScript标准 + Nodejs API(Chrome V8提供的系统底层操作)

JS和Nodejs虽然都遵循ECMAScript标准(都是Javascript),但是运行环境不同,拥有的API不同,所以他们功能相差很大。

相同点: 对于一些基础类型语法,比如String、Array、Date,ES6新语法等,JS和Nodejs是没有区别的。

不同点: 比如JS可以操作网页元素(比如修改CSS样式),拥有浏览器中的windows对象、拥有鼠标事件等,Nodejs都不具有这些——所以JS是前端。 同样Nodejs可以操作系统底层文件,创建服务监听,而JS都不具有这些——所以Nodejs是后端。

Nodejs的优势: 相对其他编程语言,比如Java/.Net/python,这些语言能够做的事情非常非常多,比如开发桌面软件或APP,Web服务端只是他们众多应用领域中的其中一种,而Nodejs从诞生到现在唯一用途就是Web服务端。

那些语言对于计算能力要求比较高,属于CPU(或GPU)操作频繁,也称“CPU密集”,(比如用Python写大数据处理、人工智能、区块链等,对于计算量要求比较大),而Web服务对数据计算量少,但对I/O(文件读写)操作频繁,也称“I/O密集”,刚好正式Nodejs的优势。

Nodejs是I/O异步非阻塞: 可以答应干很多活,至于什么时候干完不能保证,但是答应过的就一定会去干,只是迟早而已。 拿比喻来说,异步非阻塞相当于一个饭店里的店小二,来一位客人就记录他点的菜,并把所点的菜名传递给后厨,接着就可以接待下一位客户,至于后厨什么时候做好店小二不能保证,但是如果后厨把饭菜做好后,店小二能够精准的把饭菜送到对应客人的桌子上。