一、 Node.js
1.1 Node.js是什么
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
简单来讲,就是一个使用js写服务器的代码环境。
1.2 Node.js有什么特点
1.2.1 优点
异步的非阻塞的I/O(I/O线程池)
事件循环机制
单线程
跨平台
1.2.2 缺点
回调函数嵌套太多、太深(俗称回调地狱)
单线程,处理不好CPU 密集型任务
1.3 Node.js的应用场景
主要应用场景:中间层BFF(backends for frontends)、RESTful API
I/O 密集型的领域:如 服务端渲染,前端项目构建。
低延迟的网络应用:如 即时聊天。
1.4 Node.js的安装
一键傻瓜式安装
安装完成之后,打开命令行窗口,输入node -v查看当前node版本
二、模块化
三、包和包管理器 npm
四、 Buffer 缓冲器
4.1 Buffer是什么
Buffer是一个和数组类似的对象,不同是Buffer是专门用来保存二进制数据的。
4.2 Buffer特点
大小固定:在创建时就确定了,且无法调整
性能较好:直接对计算机的内存进行操作
4.3 Buffer的使用
4.3.1创建 Buffer
//创建一个指定size大小的Buffer
var buf = Buffer.alloc(size); //安全,里面全是0
var buf = Buffer.allocUnsafe(size); //不安全,可能包含旧数据,需要重写所有数据
//获取Buffer的长度
buf.length
4.3.2 转换
// 相当于Buffer.alloc(size);
var buf = Buffer.allocUnsafe(size);
buf.fill(0) //将可能出现的敏感数据用0全部填充
// 将一个字符串转换为Buffer
var buf = Buffer.from(str);
// 将一个Buffer转换为字符串
var str = buf.toString();
五、 fs 文件系统
5.1 fs是什么
全称为file system,所谓的文件系统,就是对计算机中的文件进行增删改查等操作。它是一个服务器的基础,在Node中通过fs模块来操作文件系统。
5.2 fs的使用
fs模块是Node的核心模块,不需要下载,直接引入即可使用。
// 引入 fs 模块var fs = require( "fs" ); |
|---|
fs中的大部分方法都为我们提供了两个版本:
| 同步方法 | 异步方法 |
|---|---|
| 带sync的方法 | 不带sync的方法 |
| 同步方法会阻塞程序的执行 | 异步方法不会阻塞程序的执行 |
| 同步方法通过返回值返回结果 | 异步方法都是通过回调函数来返回结果的 |
5.3文件的写入
5.3.1 同步写入
-
打开文件
-
写入内容并保存
-
关闭文件
5.3.2异步写入
-
打开文件
-
写入内容并保存
-
关闭文件
6.3.3简单写入
6.3.4流式写入
流式文件写入适用于一些比较大的文件,可以分多次向文件中写入内容,有效避免内存溢出的问题
5.4文件的读取
5.4.1 简单读取文件
fs.readFileSync(path[, options])
fs.readFile(path[, options], callback)
参数:
path 读取文件的路径
options 配置对象
encoding 指定打开文件的编码,默认是null
flag 文件的操作类型,默认是 r
callback 回调函数,通过回调函数返回读取到的数据
err 错误对象
data 返回的数据(Buffer)
5.4.2 流式读取文件
适合较大的文件
// 方式一:
//创建一个可读流
var rs = fs.createReadStream("C:\\other\\MP3\\music.mp3");
//创建一个可写流
var ws = fs.createWriteStream("biji.mp3");
//监听可读流,可读流读取完毕后会自动关闭
rs.once("open" , function () {
console.log("流打开了");
});
rs.once("close" , function () {
console.log("流关闭了");
//数据读取完毕,可以关闭可写流
ws.end();
});
//监听可写流
ws.once("open" , function () {
console.log("可写流打开了");
});
ws.once("close" , function () {
console.log("可写流关闭了");
});
//要通过可读流读取一个文件,必须为流绑定一个data事件,当绑定了data事件以后,流会自动读取
rs.on("data",function (data) {
//console.log(data);
//将数据写入到可写流中
ws.write(data);
});
//方式二:
//创建一个可读流
var rs = fs.createReadStream("C:\\other\\MP3\\music.mp3");
//创建一个可写流
var ws = fs.createWriteStream("biji.mp3");
/*
pipe()
- 可以将一个可读流中的内容写入到一个可写流中
*/
rs.pipe(ws);