本文介绍: Node.js 不是一种新语言而是一个平台,为 JavaScript 提供了浏览器之外的运行环境。它提供了丰富的内置模块,包括 File System 模块、Net 模块、HTTP 模块、URL 模块、Process 模块等等。这些模块能够让 JavaScript 操作我们计算机,建立 Web 服务器

在 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 引擎提供。常见的还有:

此外,还有一些方法属于引擎内置 API,但是两者都能实现,比如 setTimeoutsetInterval 方法,Console 对象等等。

Node.js基本架构

在这里插入图片描述

图是 Node.js 的基本架构我们可以看到,Node.js 是运行在操作系统之上的,它底层由 V8 JavaScript 引擎,以及一些 C/C++ 写的库构成,包括 libUV 库、c-ares、llhttp/httpparseropenssl、zlib 等等。

其中,libUV 负责处理事件循环,c-ares、llhttp/httpparser、openssl、zlib 等库提供 DNS 解析、HTTP 协议、HTTPS 和文件压缩功能

在这些模块的上一层是中间层,中间层包括Node.js BindingsNode.js Standard Library以及C/C++ AddOnsNode.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 内置的模块比较丰富,常用的主要是以下几个。

以上这些模块在后续课程我们都会用到这里咱们有个大概印象就行了。除此之外,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|\_/                         
 |/  |\        /  |H===H| |                            
     ||\      /|  |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 服务器

原文地址:https://blog.csdn.net/qq_37215621/article/details/134625721

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_19569.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注