浙江做网站公司,wordpress插件dedecms,东莞市卫生健康局,中国广告网站在 Node.js 出现之前#xff0c;最常见的 JavaScript 运行时环境是浏览器#xff0c;也叫做 JavaScript 的宿主环境。浏览器为 JavaScript 提供了 DOM API#xff0c;能够让 JavaScript 操作浏览器环境#xff08;JS 环境#xff09;。
2009 年初 Node.js 出现了#xf…在 Node.js 出现之前最常见的 JavaScript 运行时环境是浏览器也叫做 JavaScript 的宿主环境。浏览器为 JavaScript 提供了 DOM API能够让 JavaScript 操作浏览器环境JS 环境。
2009 年初 Node.js 出现了它是由 Ryan Dahl 基于 Chrome V8 引擎开发的 JavaScript 运行时环境所以 Node.js 也是 JavaScript 的一种宿主环境。而它的底层就是我们所熟悉的 Chrome 浏览器的 JavaScript 引擎因此本质上和在 Chrome 浏览器中运行的 JavaScript 并没有什么区别。
但是Node.js 的运行环境和浏览器的运行环境还是不一样的。
Node.js、V8与Chrome浏览器的关系
因为 Node.js 不是浏览器所以它不具有浏览器提供的 DOM API比如 Window 对象、Location 对象、Document 对象、HTMLElement 对象、Cookie 对象等等。但是Node.js 提供了自己特有的 API比如全局的 global 对象也提供了当前进程信息的 Process 对象操作文件的 fs 模块以及创建 Web 服务的 http 模块等等。这些 API 能够让我们使用 JavaScript 操作计算机所以我们可以用 Node.js 平台开发 web 服务器。
也有一些对象是 Node.js 和浏览器共有的如 JavaScript 引擎的内置对象它们由 V8 引擎提供。常见的还有
基本的常量 undefined、null、NaN、Infinity内置对象 Boolean、Number、String、Object、Symbol、Function、Array、Regexp、Set、Map、Promise、Proxy全局函数 eval、encodeURIComponent、decodeURIComponent等等。
此外还有一些方法不属于引擎内置 API但是两者都能实现比如 setTimeout、setInterval 方法Console 对象等等。
Node.js 的基本架构 上图是 Node.js 的基本架构我们可以看到Node.js 是运行在操作系统之上的它底层由 V8 JavaScript 引擎以及一些 C/C 写的库构成包括 libUV 库、c-ares、llhttp/http-parser、open-ssl、zlib 等等。
其中libUV 负责处理事件循环c-ares、llhttp/http-parser、open-ssl、zlib 等库提供 DNS 解析、HTTP 协议、HTTPS 和文件压缩等功能。
在这些模块的上一层是中间层中间层包括Node.js Bindings、Node.js Standard Library以及C/C AddOns。Node.js Bindings层的作用是将底层那些用 C/C 写的库接口暴露给 JS 环境而Node.js Standard Library是 Node.js 本身的核心模块。至于C/C AddOns它可以让用户自己的 C/C 模块通过桥接的方式提供给Node.js。
中间层之上就是 Node.js 的 API 层了我们使用 Node.js 开发应用主要是使用 Node.js 的 API 层所以 Node.js 的应用最终就运行在 Node.js 的 API 层之上。
Node.js 可以做什么
Node.js 是运行在操作系统中的 JavaScript 运行时环境提供了一系列操作系统的 API通过它们我们可以执行操作系统指令、读写文件、建立网络连接、调用操作系统中的其他服务等等。
Node.js 内置的模块比较丰富常用的主要是以下几个。
File System 模块这是操作系统的目录和文件的模块提供文件和目录的读、写、创建、删除、权限设置等等。Net 模块提供网络套接字 socket用来创建 TCP 连接TCP 连接可以用来访问后台数据库和其他持久化服务。HTTP 模块提供创建 HTTP 连接的能力可以用来创建 Web 服务也是 Node.js 在前端最常用的核心模块。URL 模块用来处理客户端请求的 URL 信息的辅助模块可以解析 URL 字符串。Path 模块用来处理文件路径信息的辅助模块可以解析文件路径的字符串。Process 模块用来获取进程信息。Buffer 模块用来处理二进制数据。Console 模块控制台模块同浏览器的Console模块用来输出信息到控制台。Crypto 加密解密模块用来处理需要用户授权的服务。Events 模块用来监听和派发用户事件。
以上这些模块在后续课程中我们都会用到这里咱们有个大概印象就行了。除此之外Node.js 还有其他的模块有兴趣的同学可以访问Node.js官方文档查看这些模块的介绍。
除了上述核心模块外Node.js 的社区生态也非常活跃有大量的第三方模块可以使用它们都可以用 NPM 包管理工具来安装我们也会在后面的课程介绍一些。
话不多说现在我们一起安装 Node.js 到我们的系统中然后写一个小例子来体验一下 Node.js 的使用吧!
安装 Node.js
我们可以在 Node.js 官网 https://nodejs.org 上下载适合我们操作系统的 Node.js。不论是 MacOS、Linux 系统还是 X86 或 64 位 windows 系统都有对应的版本可以安装。
有两个可以选择的版本一个是 LTS 版本叫做 Long Term Support 版也就是官方推荐的比较成熟稳定的版本目前是 16.16.0。另一个是 Current 版本也就是当前发布的最新版没有那么成熟但是包含最多的新特性。
一般来说如果要开发一个在线 Web 应用为了稳定性通常优先选择 LTS 版本我们的课程就选择这个版本。下载对应版本后解压安装即可。安装完成后打开命令行终端执行命令 node -v可以查看当前安装的 Node.js 的版本号。
$ node -v
v16.16.0接下来我们可以在命令行终端的任意目录下创建我们 js 文件。我们先来尝试创建一个文件ziyue.js。编辑这个文件的内容如下
const template (text) __._ / ___)_ (_/Y \\ __ |||.. ). | |((| o |p| | ${text}_./| \\( /\\ ) |__ / |\\ ||||||||. / \\\\ ||||||||\\ / \\ \\\\ ||||||//\\ ( Y \\\\|||| // _\\ | -\\ \\\\ \\\\// \\ | -\\__.-./ //\\.---.^__ | \\ / ||__/\\_|| | | \\__\\ |||| |||| | | |||| |||| / / ---| /||| |||| / | /| // || |||| /| | //| // ||_|||| / | | // \\ ||| /||||| | | \\ // \\||| / |/|||| \\ | |// ||| / ,/|||| | // |||/ /|/||// | //| , ||// /\\|/\\// / / //\\ / \\|/ /H\\|/H\\/ /_/ // |\\_/ |__/|H\\|/H|\\_/ |/ |\\ / |HH| | ||\\ /| |H|||H| | ||______/ | |H|||H| | \\_/ _/ _/ |L|||J| \\_ _/ ___/ ___\\__/___ -._ /__________/\\__/\\--- ;const argv process.argv;
console.log(template(argv[2] || 有朋自远方来不亦乐乎));然后我们在控制台上进入这个项目目录运行 node 命令
node ziyue.js然后我们就可以看到控制台上的输出内容了。 接下来我们看一下上面这段代码做了什么。这个代码和浏览器的 JS 没有什么区别我们定义了一个输出模板字符串的函数template它接受一个text参数然后用它解析模板字符串最终通过console.log得到输出结果。
注意我们的 console.log 中给 text 一个默认值但是实际上还有一个process.argv[2]的变量这个是做什么用的呢
实际上process.argv 可以获得命令行调用的信息以空格分隔。所以按照我们执行node ziyue.js的命令这时候process.argv的值是数组[node, ziyue.js]所以process.argv[2]的值是 undefined结果就输出了默认值。
现在我们换一种方式调用
node ziyue.js 三人行必有我师焉得到如下输出。 总结
Node.js 不是一种新语言而是一个平台为 JavaScript 提供了浏览器之外的运行时环境。它提供了丰富的内置模块包括 File System 模块、Net 模块、HTTP 模块、URL 模块、Process 模块等等。这些模块能够让 JavaScript 操作我们的计算机建立 Web 服务器。