1. 基础内容
const fs = require('fs')
// 创建文件夹
fs.mkdir('./logs', (err) => {
console.log('done')
})
// 文件夹改名
fs.rename('./logs', './log', () => {
console.log('done')
})
// 删除文件夹 fs.rmdir('./log', () => {
console.log('done.')
})
// 写内容到文件里
fs.writeFile( './logs/log1.txt',
'hello',
// 错误优先的回调函数
(err) => {
if (err) {
console.log(err.message)
} else {
console.log('文件创建成功')
}
}
)
// 给文件追加内容
fs.appendFile('./logs/log1.txt',
'\nworld',
() => {
console.log('done.')
})
// 读取文件内容
fs.readFile('./logs/log1.txt',
'utf-8',
(err, data) => {
console.log(data)
})
// 删除文件
fs.unlink('./logs/log1.txt', (err) => {
console.log('done.')
})
// 批量写文件
for (var i = 0; i < 10; i++) {
fs.writeFile(`./logs/log-${i}.txt`,
`log-${i}`,
(err) => {
console.log('done.')
})
}
// 读取文件/目录信息
fs.readdir('./', (err, data) => {
data.forEach((value, index) => {
fs.stat(`./${value}`, (err, stats) => {
// console.log(value + ':' + stats.size)
console.log(value + ' is ' + (stats.isDirectory() ? 'directory' : 'file'))
})
})
})
// 阻塞后面代码执行(同步)
import fs from 'fs'
try {
fs.mkdirSync("./log")
} catch (error) {
console.log("出错了",error);
}
// 没有阻塞问题(异步)
import fs from 'fs/promises'
fs.mkdir("./ddd").then((result) => {
console.log(result)
}).catch((err) => {
console.log(err)
});
2.stream流
读取文件内容
import fs from "fs"
var res = fs.createReadStream('1.txt', 'utf-8')
res.on("data", (chunk) => {
console.log("data");
console.log(chunk)
})
res.on("end", () => {
console.log("end");
})
res.on("error", (err) => {
console.log("ERROR"+err);
})
往文件写入内容
import fs from "fs"
var ws = fs.createWriteStream('2.txt', 'utf-8')
ws.write('121231121')
ws.write('55555555')
管道(高性能的复制方法,原文件数据会被清空,两个文件内容一模一样)
import fs, { ReadStream } from "fs"
var read = fs.createReadStream('1.txt', 'utf-8')
var ws = fs.createWriteStream('2.txt', 'utf-8')
read.pipe(ws)
3.zilb模块 (压缩文件,优化传输过程)
import http from 'http'
import fs from 'fs'
import zilb from 'zlib'
const gzip = zilb.createGzip()
http.createServer((req, res) => {
const readStream = fs.createReadStream('./mkdir.js')
res.writeHead(200,{
//数据的格式
"Content-Type": "application/x-javascript;charset=utf-8",
//浏览器解压缩时的格式
"Content-Encoding":"gzip"
})
//输出之前用gzip压缩一下
readStream.pipe(gzip).pipe(res)
}).listen(3000, () => {
console.log("开启");
})
4.crypto
1.md5 和 sha1
import crypto from 'crypto'
// 这两种算法都是加密效果
// const hash = crypto.createHash('sha1')
const hash = crypto.createHash('md5')
hash.update('hello')
console.log(hash.digest('hex'))
2.Hmac 带秘钥的加密算法
import crypto from 'crypto'
// createHmac中第二个参数就是秘钥
const hash = crypto.createHmac('md5', 'wanye')
hash.update('hello')
console.log(hash.digest('hex'))
3.AES 对称加密算法 (常用)
import crypto from 'crypto'
// 加密
function encrypt(key: string, iv: string, data: string) {
let decipher = crypto.createCipheriv('aes-128-cbc', key, iv)
return decipher.update(data, 'binary', 'hex') + decipher.final('hex')
}
// 解密
function decrypt(key: string, iv: string, crypted: string) {
crypted = Buffer.from(crypted, 'hex').toString('binary')
let decipher = crypto.createDecipheriv('aes-128-cbc', key, iv)
return decipher.update(crypted, 'binary', 'utf8') + decipher.final('utf8')
}
// 需要的条件 16*8=128
let key: string = 'abcdef1234567890'
let iv: string = 'aaaaaa1234567890'
let data = 'hello'
// 加密结果
let cryted = encrypt(key, iv, data)
console.log(cryted)
// 解密结果
let cryteTrue = decrypt(key, iv, cryted)
console.log(cryteTrue)