-
什么是Node.js
就是 JavaScript 的服务器端运行环境, 可以让程序员使用JavaScript 来实现服务器端的编程;
-
Node.js 中 JavaScript 的组成部分
ECMAScript核心 + 全局成员 + 核心API模块 ECMAScript核心 :var for if .... 全局成员:setTimeout, console... 核心API模块:就是 node 平台 单独提供的一些API,这些API是Node 平台所独有的;
-
读取文件 fs.readFile()
fs.readFile 有三个参数:
参数1: 表示要读取的文件的路径
参数2: 表示 要以什么样的编码格式,来读取指定的文件 默认 编码格式为 null
参数3: 表示 当文件读取完成,调用这个 callback 回调函数来处理读取的结果:
回调函数有两个参数: 第一个 参数,是 Error 对象,第二个参数,才是读取成功的结果
const fs = require('fs')
fs.readFile('./files/11.txt', 'utf-8', function (err, data) {
if (err) return console.log('读取文件失败:' + err.message)
console.log('读取文件成功,内容是' + data)
})
4.文件写入fs.writeFile()
参数1: 路径字符串,表示要把文件内容,写入到哪个文件中
参数2: 要写入的数据,可以给定一个 字符串
参数3: 可选参数,表示 要以什么格式写入文件内容 默认以 utf8 格式写入文件【一般默认不传递第三个参数】
参数4: 文件写入完成之后的 callback 回调函数
在回调函数中,只有一个形参,err 错误对象
const fs = require('fs')
fs.writeFile('./files/2.txt', '222', (err) => {
if (err) return console.log('写入文件失败!' + err.message)
console.log('文件写入成功!')
})
注意:如果在使用 fs.writeFile 的时候,要写入的文件不存在,则直接写入;如果要写入的文件路径已经存在,则会覆盖之前的文件
5.文件追加 fs.appendFile()
参数1: 表示要向哪个文件中追加内容,指定一个文件的路径
参数2: 表示要追加的具体的内容,可以传递字符串内容
参数3: 可选参数;表示 追加文本内容时候的编码格式,如果省略此参数,默认以 utf8 的格式追加内容
参数4: 表示 追加完成之后的回调
有形参 err ,追加失败之后的错误结果
// 1. 导入 fs 文件操作模块
const fs = require('fs')
// 2. 调用 fs.appendFile 追加文件内容
fs.appendFile('./files/3.txt', '\n333', (err) => {
if (err) return console.log('追加文件失败!' + err.message)
console.log('追加文件成功!')
})
-
复制文件fs.copyFile()
fs.copyFile(src, dest[, mode], callback)
参数1: 要拷贝的源文件名。
参数2: 拷贝操作的目标文件名。
参数3: 可选参数,用于拷贝操作的修饰符。默认值: 0
参数4: 回调函数
回调函数只有一个参数,错误对象
const fs = require('fs')
fs.copyFile(__dirname + '/files/1.txt', __dirname + '/files/1-copy.txt', (err) => {
if (err) return console.log('拷贝失败:' + err.message)
console.log('拷贝成功!')
})
注意: 如果目标文件已经存在,则会覆盖
- fs中的路径问题 调用 fs 中方法的时候,如果提供的操作路径是相对路径,则会根据当前执行 node 命令时候的磁盘目录去拼接提供的文件的相对路径,从而会容易出现问题。
在 node 中, __dirname 表示当前这个文件,所处的磁盘目录。
在以后使用fs模块时, 涉及到路径的,都用绝对路径
fs.readFile(__dirname + '/files/1.txt', 'utf8', (err, data) => {
if (err) return console.log(err.message)
console.log(data)
})
补充: __dirname 和 __filename 的区别
// __dirname 表示 当前这个文件执行的时候,所处的 根目录,只是代表一层目录而已;
console.log(__dirname) // C:\Users\xxx\Desktop\day1
// __filename 表示 当前这个 文件的 完整路径,路径中包含了具体的文件名
console.log(__filename) // C:\Users\xxx\Desktop\day1\test.js
- path路径模块
path模块 用于处理文件和目录的路径
7.1 path.join() 拼接路径
path.join([...paths])
参数: 接收一个路径片段的序列,必须是字符串
返回值: 字符串
// 1. 导入 path 模块
const path = require('path')
const fs = require('fs')
path.join('目录1', {}, '目录2');
// 不是字符串报错 抛出 'TypeError: Path must be a string. Received {}'
path.join('/目录1', '目录2', '目录3/目录4', '目录5', '..');
// 返回: '/目录1/目录2/目录3/目录4'
注意: 拼接的时候符合常规操作, ..就代表向上翻一层目录,所以上面的目5 就和 后面的 抵消了。
//path.join() 路径拼接时,路径名 ./路径 和 /路径 效果是一样的
const result = path.join('c:/', 'a', './b', '/c', './d/e', 'f', '../g')
console.log(result) // c:\a\b\c\d\e\g
fs.readFile(path.join(__dirname, './files/1.txt'), 'utf8', (err, dataStr) => {
if (err) return console.log(err.message)
console.log(dataStr)
})
path其它方法属性如有用到,请参考官方文档,这里不做记录。
-------------结束-----------------