一、Node.js 简介
概念:
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
**注:**是 Node 选择了 JavaScript,不是 JavaScript 发展出来了一个 Node。
运行命令:
1. 查看node版本号
node -v
2.查看NPM命令的版本号
npm -v
3. Node命令运行js文件
node 文件名(.后缀名)
**注:**后缀名可以用省略
4. 清屏命令
cls
5. 返回上一级目录
cd ..
6. 返回根目录
cd /
7. 进入相关目录
cd 文件夹名/相对路径/绝对路径
8. 查看当前路径下的文件及文件夹
dir
注:如果需要切换根目录路径的时候,则需要切换盘符
9. 切换盘符命令
盘符:
注:可以采用盘符路径切换模式,进行双盘符路径切换。
10. 创建文件夹命令
mkdir/md 文件夹的名字
11. 删除文件夹命令
rmdir/rd 文件夹的名字
采用命令删除,无法恢复。注:目录为非空目录不会删除
12. 帮助命令
help
二、Node特点
1.单线程
2.非阻塞I/O机制
3.事件环机制/事件驱动
三、Node全局对象和全局属性
Node全局对象:global
ES2020跨平台全局对象:globalThis
返回当前文件的父级路径(绝对路径):__dirname
返回当前文件的绝对路径:__filename
四、Buffer模块
概念:
Buffer模块是Node的核心类库,提供了一种原始的数据存储方法(即二进制形式存储数据)。注:虽然Buffer的存储方式为二进制,但其输出的表现形式为十六进制。
常用方法:
开辟缓存区方法
1.Buffer.alloc(size[, fill[, encoding]]),根据size的大小开辟缓存区
size,设置开辟缓存区的大小,单位是字节,一个字节采用两位16进制数表示
fill,设置缓存区填充值,默认值是0
encoding,设置编码格式,默认值utf8
let buf= Buffer.alloc(10,"a","utf16le");
console.log(buf);
2.Buffer.from(string[, encoding]);将参数字符串存入缓存区,注:开辟缓存区的大小跟字符串大小一致。
string,设置需要往缓存区存储的字符串
encoding,设置编码格式,默认值utf8
注:在Node中,一个中文字符3个字节
let buf=Buffer.from("我是web前端班级,1116");
let buf=Buffer.from("我,","utf16le");
console.log(buf);
输出缓存区的数据
buf.toString([encoding[, start[, end]]]),将缓存区的内容以字符串的形式输出
encoding,设置编码格式,默认值utf8
start,开始输出的位置,默认值0
end,结束输出的位置,默认值是字符串长度。注:结束位置前的内容会被读取,但结束位置的内容不会被读取
let buf=Buffer.from("我是web前端班级,1116");
console.log(buf.toString("utf8",3,10));
向缓存区写入数据
buf.write(string[, offset[, length]][, encoding]),将参数字符串写入到已有的缓存区。覆盖式写入
string,需要写入的字符串
offset,写入的偏移量,(写入的位置,包含当前位置)
length,写入的长度。
encoding,设置编码格式,默认值utf8
let buf=Buffer.alloc(100);
buf.write("今天是个雾霾天!",15,9);
console.log(buf.toString());
注:缓存区的大小不会改变,如果后写入的内容少于原来的内容,则只会部分覆盖。
合并缓存区
Buffer.concat(list[, totalLength]),合并缓存区,并生成新的缓存区。深拷贝缓存区。
list,是一个数组类型,表示缓存区的集合
totalLength,设置合并后的缓存区的长度,默认值是所有缓存区的总长度
let buf1=Buffer.from("刚才班长不在状态!");
let buf2=Buffer.from("一会下课罚跑圈!");
// console.log(buf1,buf2);
let buf=Buffer.concat([buf1,buf2],21)
console.log(buf.toString());
获取缓存区的长度
buf.length,获取当前缓存区的长度。
let buf=Buffer.from("我是憨憨!");
console.log(buf.length);
五、模块化
概念:
在Node.js中,一个js文件就称之为一个模块(Module)。
好处:
可以提高代码的安全性、维护性和可复用性。
步骤:
1、定义模块:对所需要的业务或功能进行封装。
2、抛出模块:模块只有一个出口,module.exports/exports。
3、引入模块:使用require()方法引入。
案例:
封装的js模块文件
//1、定义模块
function quire(arr){
return [...new Set(arr)];
}
//2、抛出
module.exports=quire;
需要使用的模块文件
//3、引入
let a=require("./quire");
let arr=[1,3,5,2,4,6,2,3,5,6,7,4,6,7,8,];
let arr2=[2,3,5,3,4,6,3,,6,7,4,,2,43,5,6,7,7];
console.log(a(arr));
console.log(a(arr2));
Node模块化关键词
1、定义模板,
指定义一个具有特定功能的函数/类
function quire(arr) {
return [...new Set(arr)];
}
2、抛出模块
抛出采用的关键词 module.exports或者exports
2.1module.exports的抛出方式
暴露抛出
语法:module.exports=方法名/属性名/类名
module.exports=quire;
let username="rypy";
module.exports=username;
隐式抛出
使用变量名抛出
语法:module.exports.新变量名=方法名/属性名/类名
let username="admin";
module.exports.uname=username;
直接抛出对象 (推荐使用)
语法:module.exports={新的键名:需要抛出的方法名/属性名/类名}
let username="admin123";
module.exports={"uu":username};
2.2、exports抛出方式
其是module.exports的引用,实际完成抛出功能的方法还是module.exports
exports不支持暴露抛出。只能采用重命名变量
语法:exports.变量名=方法名/属性名/类名
let pwd="123456";
exports.pp=pwd;
2.3、抛出使用规则
如果采用module.exports抛出同键名对象的时候,优先级要高于exports抛出的变量,如果采用module.exports抛出同名变量,exports抛出的也是同名变量,则谁在后面,谁会覆盖。
module.exports={aa:"bbbb"};//不会覆盖,优先级最高
module.exports.aa="bbbb";
exports.aa="aaa";
exports是module.exports的引用,当代码在执行的过程中exports会默认转换为module.exports,进行抛出,即实际完成抛出功能的关键词是module.exports
3、引入模块
在node模块化中引入只有一个关键词 require
语法:require(“绝对路径/相对路径/内置模块的名字/插件的名字”)
如果引入的是文件路径,则js文件的后缀名可以省略
let a=require("./quire");
let arr=[1,3,5,2,4,6,2,3,5,6,7,4,6,7,8,];
let arr2=[2,3,5,3,4,6,3,,6,7,4,,2,43,5,6,7,7];
console.log(a(arr));
console.log(a(arr2));