认识Node.js

1.介绍
Node.js 是一门服务器编程语言,它也遵循了 ECMAScript 语法规范,在此规范的基础上加入了 Node.js API,包含处理 http 请求、处理文件、socket 编程等。Node.js API 和 ECMAScript 两者结合组成了 Node.js,完成 Server 端的任何操作,为客户端浏览器进行服务。
Node.js 是一门服务器编程语言。它发布于 2009 年 5 月,由 Ryan Dahl 开发,也是一个基于 Chrome V8 引擎的 JavaScript 运行环境,使用了一个事件驱动、非阻塞式 I/O 模型,让 JavaScript 运行在服务端的开发平台,它让 JavaScript 成为与 PHP、Python、Perl、Ruby 等服务端语言平起平坐的脚本语言。
Node.js 有如下特点和优势:
- 它是一个 JavaScript 运行环境
- 依赖于 Chrome V8 引擎进行代码解析
- 事件驱动(event-driven)
- 非阻塞 I/O(non-blocking I/O)
- 轻量、可伸缩,适于实时数据交互应用
- 单进程,单线程
学到这里有的同学可能有些疑惑,这么多特点都是什么意思呢?Node.js 相对于其他服务器语言,例如 Ruby、Java 又有什么区别和优势呢?别着急,马上就会提到。
传统的服务器开发语言(例如 java)是多线程的,例如我们在淘宝商城购物,如果只有一个顾客发送请求,那显然是没问题的。但是当有成百上千万的用户同时访问的时候,我们肯定不希望别人买完以后才能轮到自己购买,这显然要等待很长时间。但是如果 CPU 只有一个核心的时候或者 CPU 只有一个线程的时候,确实要等待别人购买完毕以后才能购买。这就像在饭馆吃饭,如果只有一个厨师的话,同一时间只能给一个顾客做菜,这样必须要等待这一个厨师为别人做完菜以后才能为自己做菜。
为了解决这个问题,我们可以多增加几个厨师来同时为这些顾客做菜,这就是 java 语言的处理方式:使用多线程并发执行,但是这种方式势必会增加聘请厨师的成本和消耗更大的厨房空间,这无疑是一个资源的浪费,而且这种多线程模型,CPU(厨师) 在为客户服务的时候不能做其他的事,例如使用 I/O 读取文件的时候,只能等待文件系统读取文件完毕以后,才能继续做其他事。
为了解决上述问题 Node.js 应运而生。Node.js 是单线程模型、非阻塞 I/O、采用事件循环机制的原理进行处理。如下图:
::: center
:::
非阻塞 I/O 的意思就是,文件系统在进行 I/O 操作的时候,Node.js 这个线程还可以做其他的事,当文件系统读取文件完毕时,通过事件的回调函数告诉 Node.js 线程,然后 Node.js 把读取的内容响应给用户。
Node.js 中的 I/O 操作可以理解成生活中的一个幕后工作者,就像在餐馆点餐这个场景中,饭馆可以直接去把点餐的任务派发给外部擅长做菜、煮饭、酿酒的厂家,这些厂家都是非常擅长这些工作的,Node 中也有各种擅长做某件事的模块。这样当这些幕后的厂家完成这些做菜、饭、酒的事件以后,把做完的饭菜酒等食品交给厨师,然后由厨师统一的让服务员把饭菜交给顾客。这样就大大提高了整个餐馆的运营速度。
::: center
:::
如果还不明白的话,我们再看下一个例子,Node.js 就像国王,国王每天都在写任务清单,然后派发给大臣。大臣把任务清单交给下面的官员去做,而这个时候国王还是可以继续写任务清单的。当官员完成任务这个事件后,统一的任务结果交给国王(以事件回调函数的形式通知 Node.js)。此事件反复进行,这便是事件循环。所以说除了国王(Node.js)线程以外,每件事都是并行发生的,这便是 Node.js 单线程和事件循环能同时处理多个请求的原理。
2.在win和mac上使用Node.js
在 Node 官网下载。
::: center
:::
官网会根据系统自动推荐对应系统的下载版本。
推荐下载 LTS 长期支持版。
傻瓜式安装完成后,通过下面的指令检查是否成功:
1 | node - v; // 查看 node 版本 |
如果有版本信息则为成功。
需要说明的是:笔记是基于 node v14+ 的版本,低于该版本,请自行更新至对应版本中。
安装 Node
的时候会同时帮我们安装 npm (Node Package Manager)
即 Node
包管理工具,用于下载依赖的 node
包。
3.Linux 版本的 Node 下载和安装
一般我们的Node程序都是部署到Linux服务器上的,所以需要Linux的版本。
一样进入Node的官网,点击下方的Downloads
:
::: center
:::
在弹出的界面中显示的 Node 的全部下载版本,这里我们下载 Linux Binaries x64
版。见下图:
::: center
:::
也可以直接用下面的指令下载蓝桥杯云服务器提供的 Linux Node
安装文件。
1 | wget https://labfile.oss.aliyuncs.com/courses/4380/node-v14.17.3-linux-x64.tar.xz |
然后使用解压命令:
1 | tar -xvf node-v14.17.3-linux-x64.tar.xz |
解压完毕后就可以把 node-v14.17.3-linux-x64.tar.xz
文件删除了。
用命令对解压后的 node 文件夹进行改名:
1 | mv node-v14.17.3-linux-x64 node |
改名后文件夹📂名为node
。
这时还没有安装完成,如果想要安装最新版本,需要使用如下命令:
1 | cd node/bin |
注意这里是使用
./node
来使用当前路径下的node
命令。
发现版本为 14.17.3
,说明我们已经使用了自己下载的最新版本的 Node
,但是每次都需要进入到 Node
安装路径的 bin
路径下才能使用 Node
命令,比较麻烦。如何能让我们在系统的任何地方都能使用最新安装的 Node
呢?这里需要修改我们的环境变量 PATH,
把 node/bin
这个路径添加到 PATH
下。
接下来介绍怎么在 Linux 环境修改环境变量 PATH
:
为了在全局使用最新安装的 Node
,我们还需要修改一个配置文件 ~/.zshrc
。
PATH 作用:当我们在控制台输入命令的时候(例如
node -v
),系统是去 PATH 环境变量下配置的路径中寻找这个命令是否存在,查找的路径顺序为从左到右依次查找(linux 路径分隔符为 :)。如果发现对应的 PATH 路径下有 node 命令就会使用,否则就会报错。
首先使用下列命令查看我们的环境变量:
1 | env | grep node |
VScode终端的效果如下:
::: center
:::
发现 PATH 中有 /usr/sbin/nodejs/bin
,这个路径就是我们(Lanqiao 云课)实验环境默认安装的 14.15.1 的 Node 安装路径,如果想让我们新安装的 Node 优先执行的话,只需要把新版本 Node 的安装路径下的 bin 路径放到 /usr/sbin/nodejs/bin
路径前即可。
使用下列命令修改 ~/.zshrc
。
1 | vim ~/.zshrc |
使用 i
进入插入模式,在文件最后加入如下内容:
1 | export PATH=/home/project/node/bin:$PATH |
然后输入 ESC 回到普通模式,输入 :
进入命令模式,然后 输入 wq
进行保存。修改完成的文件并不会马上生效,需要使用如下命令让刚才配置的环境变量生效。
1 | source ~/.zshrc |
最后输入 node -v
重新查看 node 版本就会发现全局的 Node 已经生效。
Mac
用户可能已经发现了,配置环境变量的过程基本和 Mac
上一致,因为 Mac
就是 Linux
系统。
- 标题: 认识Node.js
- 作者: Sy_
- 创建于 : 2025-06-15 00:51:35
- 更新于 : 2025-06-15 00:51:35
- 链接: https://shenying.online//demo/j0laz2l5/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。