【Node.js】入门指南 - 1

Node.js 入门前言

去年9月份左右的前端学习Ajax时,始终不明白为什么发送一段http请求,就能获取数据,这个数据是从哪来的,怎么设计这个数据的接口,我一直很好奇,于是在晚上查找资料了解到了Node.js这个东西,知道了用它这个环境能够用JS去写后台,于是我为了弄清楚前后端分离联调这个过程,学习了Node.js的相关知识,做了一些笔记如:

Node.js是什么

官方定义:Node.js是一个基于V8的JavaScript引擎的JavaScript运行时环境

原话:(Node.js is a JavaScript runtime biilt on Chrome’s V8 JavaScript engine).

  • 也就是说Node.js基于V8引擎来执行JavaScript的代码,但是不仅仅只有V8引擎
  • V8可以嵌入到任何c++应用程序中,无论是Chrome还是Node.js,事实上都是嵌入了v8引擎来执行JavaScript代码
  • 但是在Chrome浏览器中,还需要解析、渲染HTML、CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API、浏览器自己的事件循环等
  • 另外,在Node.js中我们也需要进行一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作

Node.js架构

【Node.js】入门指南 - 1_第1张图片

  • JS代码会经过V8引擎,在通过Node.js的Bindings,将任务放到Libuv的时间循环中
  • libuv是使用C语言编写的库
  • libuv提供了事件循环,文件系统读写,网络IO、线程池等等内容

Node的应用场景

Node.js现在是企业快速发展下对高级前端工程师的基本要求,在实习或秋招中通常也会对大家的Node.js有一定要求,所以Node.js或多或少都是有所了解。

  • 前端开发的库都是以node包的形式进行管理
  • npm、yarn、pnpm工具成为前端开发使用最多的工具
  • 越来越多的公司使用Node.js作为web服务器开发、中间件、代理服务器
  • 大量项目需要借助Node.js完成前后端渲染的同构应用
  • 资深前端工程师需要为项目编写脚本工具(前端工程师编写脚本通常会使用JavaScript,而不是Python或者shell)
  • 很多企业在使用Electron来开发桌面应用程序

Node的安装和管理

Node.js安装

【Node.js】入门指南 - 1_第2张图片

安装LTS版本,区别:

  • LTS版本: (Long-term support,长期支持)相对稳定一些,推荐线上环境使用该版本
  • Current版本:最新的Node版本,包含很多新特性
  • 安装过程全程下一步

Node版本工具

  • nvm,(Windows安装比较麻烦,Mac简单)

安装nvm后,几个命令

  • nvm install latest 安装最新的node、
  • nvm list 展示目前安装的所有版本
  • nvm use 切换版本

Node.js中执行JavaScript代码

如果我们编写一个js文件,里面存放JavaScript代码,如何来执行它呢?目前我们知道有两种方式可以执行:

  • 将代码交给浏览器执行
  • 将代码载入到node环境中执行

如果我们希望把代码交给浏览器执行:

  • 需要通过让浏览器加载、解析html代码,所以我们需要创建一个html文件
  • 在html中通过script标签,引入js文件
  • 当浏览器遇到script标签时,就会根据src加载、执行JavaScript代码

如果我们希望把js文件交给node执行

  • 首先电脑上需要安装Node.js环境,安装过程中会自动配置环境变量
  • 可以通过终端命令node js文件的方式来载入和执行对应的js文件

正常情况下执行一个node程序,直接跟上我们对应的文件即可

node index.js

但是,在某些情况下执行node程序的过程中,我们可能希望给node传递一些参数

node index.js 123123

如果我们这样来使用程序,就意味着我们需要在程序中获取到传递的参数

  • 获取参数其实是在process的内置对象中的;
  • 如果我们直接打印这个内置对象,它里面包含特别的信息:
    √其他的一些信息,比如版本、操作系统等大家可以自行查看,后面用到一些其他的我们还会提到现在
  • 我们先找到其中的argv属性:
    我们发现它是一个数组,里面包含了我们需要的参数;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4ViMeq2H-1672324518468)(https://p1-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/5c4c0677b8744f78bf0c449a4ddab86b~tplv-k3u1fbpfcp-watermark.image?)]

有个疑问,为什么叫argv呢?

在C/C++程序中的main函数中,实际上可以获取到两个参数:

  • argc: argument counter的缩写,传递参数的个数;
  • argv: argument vector(向量、矢量)的缩写,传入的具体参数。
  • vector翻译过来是矢量的意思,在程序中表示的是一种数据结构。
  • √在C++、Java中都有这种数据结构,是一种数组结构
  • 在JavaScript中也是一个数组,里面存储一些参数信息

我们可以在代码中,将这些参数信息遍历出来,使用:

【Node.js】入门指南 - 1_第3张图片

Node的输入和输出

  • console.log()打印
  • console.log()清空控制台

Node的全局对象

类似于window的全局对象

console.log(global)

特殊的全局对象

模块中的变量,只是每个模块都有,看起来像是全局变量

  • __dirname 获取当前文件所在路径(两个横线)
  • __filename 获取当前文件所在的路径和文件名称

常见的全局对象

  • process 提供了Node进程中相关的信息
    • 比如Node的运行环境,参数信息等
  • console对象 提供了简单的调试控制台
  • 定时器函数
    • setTimeout: callback在delay毫秒后执行一次
    • setInterval: callback在delay毫秒后重复执行
    • setImmediate: callback I/O事件后的回调的立即执行
    • process.nextTick: 添加到下一次tick队列中

你可能感兴趣的:(前端学习,javascript,node.js)