目录
④在VScode打开:右键js文件👉在集成终端打开 输入node 文件名.js
③操作(十进制转二进制 , 二进制转十进制String.fromCharCode() , 一堆二进制转成字符串.toString())
前提: let fs = require('fs') 引入fs模块
①异步API : fs.writeFile(file , data , [,options] , callback); 代码执行顺序和写的顺序不统一,最后输出回调函数
②同步API : fs.writeFileSync(file, data , [,options] ); 执行顺序和代码顺序一致
2.练习:将一个对象data存入到电脑D盘内(记住先用JSON转成字符串)
3.文件流式写入 fs.createWriteStream(path,[ options])
①对于简单的写入次数较少的情况,可以使用 writeFile ;
②如果是批量要写入的场景,使用 createWriteStream ;
①异步: fs.readFile(‘文件名’, function(err, data){}) 回调函数有两个参数,
2.流式读取 fs.createReadStream(‘文件名’); 一点一点读取
1.异步fs.rename('旧路径', '新路径', function(err){})
2.同步fs.renameSync('旧路径','新路径')
1.异步: fs.unlink('./test.log', function(err){});
2.同步: fs.unlinkSync('./move.txt');
2. readdir('文件路径',(err和files)) 读取文件夹 内的列表信息,也能读硬盘里的文件
3. rmdir 删除文件夹(只能删除空的文件夹,不空不让删)
2.读取Windows下的文件时用反斜线,两个反斜线是为了防止转义
一:介绍
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,是一个应用程序。
二:作用
-
解析运行 JS 代码并且操作系统资源,如内存、硬盘、网络
比如说js代码在浏览器运行时无法对计算机的硬盘进行写入和删除的操作,但是我们通过Node.js可以实现
三:应用场景
-
APP 接口服务
-
网页聊天室
-
动态网站, 个人博客, 论坛, 商城等
-
后端的Web服务,例如服务器端的请求(爬虫),代理请求(跨域)
-
前端项目打包(webpack, gulp)
四:使用
1.下载安装
工具一定要到官方下载,历史版本下载
Nodejs 的版本号奇数为开发版本,偶数为发布版本,我们选择偶数号的 LTS 版本(长期维护版本 long term service)
双击打开安装文件,一路下一步即可😎,默认的安装路径是 C:\Program Files\nodejs
安装完成后,在 CMD 命令行窗口下运行 node -v
,如显示版本号则证明安装成功,反之安装失败,重新安装。
2.初体验
①cmd交互模式
在命令行下输入命令 node
,这时进入 nodejs 的交互模式
②退出交互模式 ctrl+c两次 ,,,,清平cls
③文件执行
创建文件 1.hello.js 写入
快速启动命令行的方法
-
在文件夹上方的路径中,直接输入 cmd 即可在cmd内进入该路径
- 然后输入 node 1.hello.js
④在VScode打开:右键js文件👉在集成终端打开 输入node 文件名.js
⑤VScode 插件运行
安装插件 『code Runner』, 文件右键 -> run code
⑤注意
在 nodejs 环境下,不能使用 BOM 和 DOM ,也没有全局对象 window,全局对象的名字叫 global
3.Buffer(缓冲器)
①介绍
Buffer 是一个和数组类似的对象,不同是 Buffer 是专门用来保存二进制数据的
②特点
-
大小固定:在创建时就确定了,且无法调整
此处和数组不同,比如数组是创建一个a = [1,2,3]我们可以用数组的方式添加元素,
但是buffer只能一开始就规定内存为多大字节
-
性能较好:直接对计算机的内存进行操作
-
每个英文元素大小为 1 字节(byte)1字节等于8个二进制位 8字节等于64个二进制位
-
一个 UTF-8 的中文字符大多数情况都是占 3 个字节
③操作(十进制转二进制 , 二进制转十进制String.fromCharCode() , 一堆二进制转成字符串.toString())
创建 Buffer(十进制转二进制)
-
直接创建 Buffer.alloc()
-
不安全创建 Buffer.allocUnsafe()
-
通过数组和字符串创建 Buffer.from(' ') 与括号内部对应的ASCII码(二进制)
-
进制转换总结:
//将 Buffer 转化成字符串
const buf_3 = Buffer.from('iloveyou');// from 来自
// 1.输出指定位数十进制的二进制代码
console.log(buf_3[0]) //105
// 2.所有十进制转二进制
console.log(buf_3); //<Buffer 69 6c 6f 76 65 79 6f 75>
// 3.所有二进制转十进制
console.log(buf_3.toString()); //iloveyou
// 4.二进制转十进制
console.log(String.fromCharCode(105)); //i
// 5.通过 ASCII 字符获取对应的编号
console.log('i'.charCodeAt()); //105
// 6.更改某一位的二进制值
buf_3[0] = 99;
console.log(buf_3.toString()); //cloveyou
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 中的内置模块,可以对计算机中的文件进行增删改查等操作。
当我们需要持久化保存数据时,要想到写入文件
写入场景:下载QQ音乐自动保存到硬盘中了;安装文件选择硬盘;日志(程序日记);数据库mongodb和mysql;网盘;我们生活中用手机用电脑时数据就在实时的写入
前提: let fs = require('fs') 引入fs模块
1.文件简单写入
①异步API : fs.writeFile(file , data , [,options] , callback); 代码执行顺序和写的顺序不统一,最后输出回调函数
-
options 选项
-
encoding
默认值:'utf8'
-
mode
默认值:0o666
-
flag
默认值:'w'
{flag:'a'}
-
- 举例:无flag: flag可省略
- 有flag:
加入flag:'a'后重复多次运行:追加字符串
②同步API : fs.writeFileSync(file, data , [,options] ); 执行顺序和代码顺序一致
③关于用同步写还是用异步写:
如果为用户提供服务服务,用异步;
如果做文件相关处理,用同步(简单的写入,读取)
2.练习:将一个对象data存入到电脑D盘内(记住先用JSON转成字符串)
3.文件流式写入 fs.createWriteStream(path,[ options])
- path
- options
==flags== 默认值: 'w'
encoding
默认值: 'utf8'
mode
默认值: 0o666
事件监听 open close eg: ws.on('open', function(){});
4.什么时候用简单写入,什么时候用流式写入
①对于简单的写入次数较少的情况,可以使用 writeFile ;
②如果是批量要写入的场景,使用 createWriteStream ;
六:文件读取
对于小文件读取用 readFile
对于大文件读取用 createReadStream
1.简单读取
①异步: fs.readFile(‘文件名’, function(err, data){}) 回调函数有两个参数,
第一个是错误,如果有错误输出错误,如果没有就是null;if里必须写return
第二个参数是data,输出是结果
②同步: fs.readFileSync(file)
③练习:JSON文件读取成JS
2.流式读取 fs.createReadStream(‘文件名’); 一点一点读取
七:复制文件
1.异步复制文件
2.流式复制文件
3.现成的方法 旧.pipe(新)
八:移动文件 + 重命名,有就重命名,没有就移动并且起名字
1.异步fs.rename('旧路径', '新路径', function(err){})
2.同步fs.renameSync('旧路径','新路径')
九:文件删除
1.异步: fs.unlink('./test.log', function(err){});
2.同步: fs.unlinkSync('./move.txt');
十:文件夹操作
1. mkdir('文件路径',回调函数err)创建文件夹
-
path
-
options
-
recursive 是否递归调用
-
mode 权限 默认为 0o777
-
-
callback
2. readdir('文件路径',(err和files)) 读取文件夹 内的列表信息,也能读硬盘里的文件
3. rmdir 删除文件夹(只能删除空的文件夹,不空不让删)
如果想删除非空文件夹,应该用递归做,可以在rmdir里面再加:为true就是递归删除
十一:路径问题:绝对路径__dirname,相对路径
十二:查看文件状态stat是否是文件夹或者文件:
传参stats
十三: node.js文件内部写入:
1.换行 \r\n
2.读取Windows下的文件时用反斜线,两个反斜线是为了防止转义
十四:附录
unicode 字符集
十五:npm
①npm init
此命令作用就是帮助我们快速创建 package.json 配置文件
如果使用 npm init --yes 则文件夹名称不能为『中文』, 也不能使用『大写』
②package.json
此文件为 npm 包的配置文件
③node_modules
存放的 npm 下载的『工具包』
我们很少使用 HTML 直接引入 node_modules 当中的内容
④npm 使用步骤
-
定位到一个文件夹下(新建 或者 已经存在的)
-
启动命令行 将工作目录定位到第一步的文件中的
-
运行
npm init
(只需要运行一次为了快速创建 package.json 配置文件) -
运行
npm i 包名
安装工具包(node_modules 是存放 npm 下载的 工具包)
安装需要联网才行
⑤注意运行命令的位置
package.json 所在的文件夹运行, 项目的根目录
⑥npm i request -S 生产依赖
会将安装的包的信息,记录在 package.json 中的 dependencies 属性
⑦npm i babel -D 开发依赖
会将安装的包的信息,记录在 package.json 中的 devDependencies 属性
⑧全局安装以下两个
npm install less -g 可以把less文件转换为css文件
npm install nodemon -g 代码无需ctrl+s保存重启,页面直接更新