Node
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个应用程序。
安装完成后,在 CMD 命令行窗口下运行 node -v
,如显示版本号则证明安装成功,反之安装失败,重新安装。
注意:
在 nodejs
环境下,不能使用 BOM
和 DOM
,也没有全局对象 window
,全局对象的名字叫 global
作用: 解析运行JS代码,操作系统资源,如内存、硬盘、网络。
应用场景
- APP 接口服务
- 网页聊天室
- 动态网站, 个人博客, 论坛, 商城等
- 后端的Web服务,例如服务器端的请求(爬虫),代理请求(跨域)
- 前端项目打包(webpack, gulp)
Buffer(缓冲器)
Buffer
是一个和数组类似的对象,不同是 Buffer
是专门用来保存二进制数据的
特点:
- 大小固定:在创建时就确定了,且无法调整
- 性能较好:直接对计算机的内存进行操作
- 每个元素大小为 1 字节(byte)
创建Buffer
- 直接创建
Buffer.alloc
- 不安全创建
Buffer.allocUnsafe
- 通过数组和字符串创建
Buffer.from
//Buffer 的声明创建
const buf_1 = Buffer.alloc(10);
const buf_2 = Buffer.allocUnsafe(10);
const buf_3 = Buffer.from('hello world');//from 来自
console.log(buf_1);
console.log(buf_2);
console.log(buf_3);
//Buffer内容的读取和设置
//获取第一个字节的内容
console.log(buf_3[0]);
//通过数字获取对应的ASCII字符
console.log(String.fromCharCode(105));
//通过ASCII获取对应的编号
console.log('a'.charCodeAt());
//将Buffer转换为字符串
console.log(buf_3.toString());
//设置
buf_3[0] = 99;
console.log(buf_3.toString());
//获取buffer存储对应的字符串表示
//关于溢出 舍去高于8位的内容 0001 0010 1100 ==> 0010 1100 ==>
buf_3[0] = 300;
console.log(buf_3);
console.log(buf_3.toString());
//关于中文,一个UTF-8中文字符占据三个字节
const buf_4 = Buffer.from('我爱你');
console.log(buf_4);
//字符集
Buffer读取和写入
- 可以直接通过
[]
的方式对数据进行处理,可以使用toString
方法将Buffer
输出为字符串 []
对buffer
进行读取和设置toString()
将 Buffer 转化为字符串
关于溢出: 溢出的高位数据会舍弃。
关于中文: 一个 UTF-8 的中文字符大多数情况都是占 3 个字节。
关于单位换算:
- 1Bit 对应的是 1 个二进制位
- 8 Bit = 1 字节(Byte)
- 1024Byte = 1KB
- 1024KB = 1MB
- 1024MB = 1GB
- 1024GB = 1TB
- 平时所说的网速 10M 20M 100M 这里指的是 Bit ,所以理论下载速度 除以 8 才是正常的理解的下载速度
文件系统 fs
fs
全称为 file system
,是 NodeJS 中的内置模块,可以对计算机中的文件进行增删改查等操作。
如何判定回调的执行是同步还是异步的? 尝试在回调中进行内容输出, 然后在回调后也进行输出, 然后对比。
关于同步API与异步 API的选择:
- 如果要做服务, 需要使用『异步』
- 如果做文件相关的处理, 不涉及为用户提供服务, 可以使用同步API(简单写入, 读取)
文件写入
需要持久化保存数据的时候,需要想到文件写入。
对于简单的写入次数较少的情况, 可以使用 writeFile
, 如果是批量要写入的场景,使用 createWriteStream
简单写入
fs.writeFile(file, data, [,options], callback);
fs.writeFileSync(file, data);
options
选项encoding
默认值:'utf8'
mode
默认值:0o666
flag
默认值:'w'
流式写入
fs.createWriteStream(path[, options])
path
options
flags
默认值:'w'
encoding
默认值:'utf8'
mode
默认值:0o666
- 事件监听
open
close
eg
:ws.on('open', function(){});
//1、引入fs
const fs = require('fs');
//2、创建写入流对象
const ws = fs.createWriteStream('./home.html');
//3、执行写入
ws.write('巧合是上帝默默操控世界的方式。');
ws.write('聆听雨落的声音,俯看凋零的落叶。伫细雨之中,感雨落之殇。');
//4、关闭写入流
ws.close();
写入文件场景
- 下载文件
- 安装文件
- 日志(程序日记) 如 Git
- 数据库
- 网盘
- 编辑器保存文件
- 视频录制
文件读取
简单读取
fs.readFile(file, function(err, data){})
fs.readFileSync(file)
流式读取 fs.createReadStream();
//1、引入fs模块
const fs = require('fs');
//2、创建读取流对象
const rs = fs.createReadStream('./index.html');
//3、绑定事件 when 当...时候
//chunk 块 当读取完一块数据后触发
rs.on('data', chunk => {
console.log(chunk.toString());
});
//读取流打开的时候触发
rs.on('open', () => {
console.log('读取流打开了');
})
rs.close();
json读取
//1、引入模块
const fs = require('fs');
//2、读取
fs.readFile('data.json', (err, data) => {
if (err) throw err;
//将Buffer转换为字符串,并赋值给一个变量
let str = data.toString();
//将字符串转换为对象
let dataJSON = JSON.parse(str);
console.log(dataJSON);
})
提示
对于小文件读取和处理 readFile
对于大文件读取 createReadStream
读取文件场景
- 下载文件
- 程序运行
- 数据读取(数据库)
- 日志 (git log)
- 编辑器打开文件
文件删除
fs.unlink('./test.log', function(err){});
fs.unlinkSync('./move.txt');
移动文件 + 重命名
fs.rename('./1.log', '2.log', function(err){})
fs.renameSync('1.log','2.log')
文件夹操作
mkdir
创建文件夹path
options
recursive
是否递归调用mode
权限 默认为0o777
callback
rmdir
删除文件夹readdir
读取文件夹