Nodejs技术总结

认识nodejs

什么是 node.js

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时(运行环境)

浏览器引擎

渲染引擎:用于解释翻译和运行 html + css (通常指的浏览器引擎就是指的渲染引擎)

js 引擎:浏览器用于编译运行 js 的工具,一个 js 代码的执行器

作用:浏览器引擎是用于解析翻译和渲染页面的工具,主要用于解释翻译 html css j

js和nodejs的区别

js 是一门非阻塞的单线程语言 js 依赖于浏览器(因为浏览器内部它内置了 js 引擎! 正因为有了 js 引擎,浏览器就可以执行 js 代码)

Node.js 应用程序运行于单个主线程中,具有线程安全性。Node.js 在其标准库中提供了一组异步的 I/O 原生功能(用以防止 JavaScript 代码被阻塞),并且 Node.js 中的库通常是使用非阻塞的范式编写的(从而使阻塞行为成为例外而不是规范)。

区别

①node.js 没有 BOM 和 DOM(不支持浏览器环境下所提供的一些api)

②浏览器环境下不支持CommonJS语法规范 报错

③都能正常的识别运行ECMA规范的代码

BOM (browser object model) 浏览器的对象模型

node.js 不能通过 js 控制浏览器(因为 node.js 不是浏览器)

DOM (document object model) 文档的对象模型

node.js 不能直接渲染页面(因为不是浏览器,没有 html 文档)

浏览器不认识 node.js 内置模块的代码

语法规范

CommonJs 和 EcmaScript 都是语法和规范

CommonJs 规定 node.js 模块化的语法规范,讲模块化时,再具体解释

EcmaScript (简称 ES)规定了 js 浏览器中的语法,也是 node.js 的语法

开发者常说的 ES5,ES6 就是 js 的语法版本,通常新版本会支持新语法特性。如:ES6 中支持 `let` 关键字,还支持 `lamda` 表达式(俗称:箭头函数,箭头方法等)

nodejs的作用

做服务器、做脚本工具(例如:一件迁移文件,一键发布代码等)

全局变量

全局变量:任何代码中,任何的作用域都能访问得到的变量称为全局变量

nodejs环境下的全局变量:

nodejs下的顶层对象 global 或者 globalThis , 在nodejs中没有window

引入模块:require

控制台对象:console

当前脚本所在的目录路径:__dirname

当前脚本的绝对路径:__filename

进程对象:process

console.log(process.pid) // pid表示当前进程的id号

console.log(process.env) // 当前计算机的环境对象

console.log(process.argv) // 获取执行当前脚本时传入的额外参数列表

内置模块

模块:一个第三方封装好的一个工具箱,开箱即用

模块可以从使用途径上大致的分为: 内置模块 和 第三方模块

内置模块:下载nodejs时,所携带的模板,由nodejs官方提供的

第三方(非官方):第三方的模块,同样具备独立的功能和特性,开箱即用

使用时的区别:

1.官方的内置模快在使用前不需要下载!直接引入使用即可

2.第三方的模块在使用其必须要先进行下载,通过npm方式或者其他方式,下载后才能引入该模块并使用

path

p ==> 路径字符串

获取传入的路径字符串中的目录路径: console.log(path.dirname(p))

文件全称:path.basename(p)

扩展名:path.extname(p)

结合路径(连接):path.join()

处理文件路径:resolve 函数(相当于模拟了 cmd 读取路径的过程)

eg:onsole.log(path.resolve('c:/abc', 'd:/demo', 'ok', 'hello.js'))

os(系统模块)

os模块(系统模块):用于查询当前系统的相关信息

cpus() 返回的一个当前系统的cpu内核数

一般用:os.cpus().length

查看当前系统架构信息:os.arch()

查看当前的系统平台 类型:os.platform()

events(事件模块)

事件模块:管理事件

通过事件模块创建一个事件发射器,实例对象:

const eventEmitter = new events.EventEmitter()

// 通过on方法绑定一个自定义事件,

eventEmitter.on('say', () => {

console.log('say hello!')

})

// 通过js代码触发say事件

setTimeout(() => {

// 触发say事件

eventEmitter.emit('say')

}

, 2000)

assert(断言模块)

断言: 下一个结论! 判断一个结论是否正确,如果 断言失败,则断言模块会自动抛出一个错误!断言之后的代码无法正常执行!

可用于:断言一个表达式的真假、除法函数(除数不能为0)、判断对象的结构数据是否一样等

assert.ok() 等价于 assert()

eg:assert.ok(sex === 'female','性别不是male')

cluster(集群)

含义:一个事物的多个重复个体形成的群落

集群的作用:集群模块可以让js代码在多个cpu核心上运行多个副本 可以更好的利用cpu,同时执行多份代码

node.js 的集群模块就是创建应用集群用的,多个相同的应用程序也能组成应用程序集群

集群中有主从的概念 :主程序 、 从程序

接受输入数据

浏览器输入api: prompt()

nodejs中的输入:

const readline = new require('readline').createInterface({

//指定输入流

input:process.stdin,

//指定输出流

output:process.stdout

})

readline.question('请输入你的名字:',(answer)=>{

console.log(answer)

// .....

// 关闭输入流

readline.close()

})

获取脚本运行时的额外参数

查看版本号:process.argv.includes('-v')

全局安装:process.argv.includes('-g')

异步

异步:程序的执行不需要等待上一次执行的结果

同步:程序需要等待,需要基于上一次执行的结果

单线程的语言如何避免主线程被阻塞的问题:为了解决阻塞,提出了异步的代码,通过回调函数

缺点:回调在解决异步问题的同时,会产生一个比较严重的问题,回调次数多了! 产生了回调地狱!

总结:(有回调不一定是异步,异步一定有回调) 回调函数可以解决异步问题,但是不代表所有的回调都是解决异步问题!

回调地域

回调地域特点:(代码呈大于符号)

1.阅读极其不变

2.逻辑无法理顺

3.代码扩展性差

Promise

作用:Promise用来更好的解决异步问题

new Promise 创建一个Promise的实列对象

这个实列对象创建完成后,会立即调用构造时传入的回调函数

resolve 是一个变量 用于接受成功后所需要执行的回调函数

reject 是一个变量 用于接受失败后或者抛出异常时所需要执行的回调函数

promise的状态

(一旦promis的状态被确定后,无法更改!)

  1. 成功状态 resolve 执行then方法中的回调函数

  1. 错误状态 reject 执行cathc方法中的回调函数

3.等待状态 pending

链式调用

then方法的返回值:默认是一个新的promise实列对象,该对象的状态基于前一个promise对象的状态

catch:它一般放在链式调用的末尾! 只写一次,catch可以捕获到它之前的所有promis的错误

promise实列对象上存在三个方法:then catch finally

promise的静态方法

静态方法: 只能由类自身调用的方法称为静态方法

1.Promise.resolve() 返回值 :是一个成功状态的promise实列对象

2.Promise.reject() 返回值 :是一个失败状态的promise实列对象

3.Promise.all([promises]):

all

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值