1.什么是Node.js
官方对Node.js的定义:Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。
也就是说Node.js基于V8引擎来执行JavaScript的代码,但是不仅仅只有V8引擎:
V8可以嵌入到任何C ++应用程序中,无论是Chrome还是Node.js,事实上都是嵌入了V8引擎来执行 JavaScript代码;
但是在Chrome浏览器中,还需要解析、渲染HTML、CSS等相关渲染引擎,另外还需要提供支持浏览器操作的API、浏览器 自己的事件循环等;
另外,在Node.js中我们也需要进行一些额外的操作,比如文件系统读/写、网络IO、加密、压缩解压文件等操作;
node.js和浏览器的差异
2.内置模块fs
fs是File System的缩写,表示文件系统,对于任何一个为服务器端服务的语言或者框架通常都会有自己的文件系统:Node也有自己的文件系统操作模块,就是fs:借助于Node帮我们封装的文件系统,我们可以在任何的操作系统(window、Mac OS、Linux)上面直接去操作文件;这也是Node可以开发服务器的一大原因,也是它可以成为前端自动化脚本等热门工具的原因;
Node文件系统的API非常的多: 点击进入官网查询API
2.1同步、异步操作
这里我们只讨论最常用的, 这些API大多数都提供三种操作方式:
方式一:同步操作文件:代码会被阻塞,不会继续执行;
方式二:异步回调函数操作文件:代码不会被阻塞,需要传入回调函数,当获取到结果时,回调函数被执行;
方式三:异步Promise操作文件:代码不会被阻塞,通过 fs.promises 调用方法操作,会返回一个Promise,可以通过then、catch进行处理;
我们这里以获取一个文件的状态为例:
方式一,同步
方式二,异步,以回调函数形式
方式三,异步,用到promise
2.2 文件的读取、写入、追加
文件读取
文件读取需要用到readFile,一共有3个参数
const fs = require('fs')
fs.readFile(参数1, 参数2, 参数3)
参数一:输入被读取文件的路径
参数二:输入编码方式,一般写'utf-8'
参数三:一个回调函数,文件读取之后执行,回调函数有两个参数,第一个是读取失败的,第二个是读取成功的
示例如下:
fs.readFile('./asc.txt',{encoding:'utf-8'},
(err,data)=>{
if(err){
console.log('文件读取错误',err);
return
}
console.log('文件读取结果:',data);
}
)
文件写入
这里和文件读取是一样的,要写入3个参数,不同之处在于,这里的回调函数只有个参数,就是err,文件写入错误的时候有消息,写入成功没有消息。
const fs = require('fs')
fs.writeFile('./asc.txt','新的内容',(err)=>{
console.log(err);
}
)
文件的追加
因为文件的写入会将新的内容直接覆盖原有的内容,所以文件追加可以这样操作: 1.读取文件
2.保存读取到的内容,将其与追加的内容合并
3.将合并的内容写入文件
代码如下:
fs.readFile('./asc.txt','utf8',(err,data)=>{
if(!err){
//将原有的内容与追加的内容合并
var newdata = data + '追加的内容';
fs.writeFile('./asc.txt',newdata,(err)=>{
if(!err){
console.log('追加成功');
}
})
}
})