nodemon热更新
文件解压缩// 压缩const fs = require('fs');const zlib = require('zlib');const gzip = zlib.createGzip();const input= fs.createReadStream('./1.txt');const output= fs.createWriteStream('./1.txt.zip');input.pipe(gzip).pipe(output);// 解压var fs = require("fs");var zlib = require('zlib');// 解压 input.txt.gz 文件为 input.txtfs.createReadStream('input.txt.gz') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('input.txt'));console.log("文件解压完成。");
文件夹压缩// 安装 npm i compressingconst compressing = require('compressing');//folder为自定义要压缩的文件夹compressing.zip.compressDir(folder, folder+'.zip').then(() => { console.log('ok');}).catch(err => { console.log(err); return});
判断资源是否存在 const fs=require("fs") //目标文件夹不存在即创建 if (fs.existsSync(target) === false) { fs.mkdirSync(target) }
遍历文件夹const fs = require('fs');const path = require('path');const folderPath = path.resolve('./testFolder');//指定要遍历的文件夹路径const cycleFolder = (folderPath) => { //根据指定要遍历的文件夹路径,返回文件列表数组,保存在files中 fs.readdir(folderPath, (err, files) => { if (err) throw err; files.forEach(filename => { //遍历读取到的文件列表数组 const absolutePath = path.join(folderPath, filename); //获取当前文件的绝对路径 //根据 fs.stat方法,返回一个提供有关文件的信息fs.Stats对象 fs.stat(absolutePath, (err, stats) => { if (err) throw err; const flag = stats.isDirectory();//文件夹递归遍历,文件直接输出绝对路径 flag ? cycleFolder(absolutePath) : console.log(absolutePath); }) }); });}//调用文件夹遍历方法cycleFolder(folderPath)
文件读写
node中大部分模块都是异步,fs中基本都实现了同步写法,若不习惯异步,用Sync同步方法即可(readFileSync)
//读文件 var fs = require('fs') fs.readFile('./a.txt', function (error, data) { if (error) { console.log('读取文件失败') } else { console.log(data.toString());//读取结果是二进制,要转化成我们认识的 } }) //写文件 var fs = require('fs') fs.writeFile('./a.txt', '冷月心', function (error) { if (error) { console.log('写入失败'); } else { console.log('写入成功'); } })
新建文件夹并写入文件var fs = require('fs');fs.mkdir('./a', function (err) { if (!err) { fs.writeFile('./a/1.txt', 'hello ', function (err) { if (err) { console.log('写入失败', err); } else { console.log('写入成功'); } }) }})
文件删除var fs = require('fs');fs.unlink('./a/1.txt', function (err) { if(!err) console.log('删除成功')})
文件夹删除const fs = require('fs'); const deleteFolder=(path)=> { let files = []; if( fs.existsSync(path) ) { files = fs.readdirSync(path); files.forEach(file=>{ let curPath = path + "/" + file; if(fs.statSync(curPath).isDirectory()) { deleteFolder(curPath); } else { fs.unlinkSync(curPath); } }); fs.rmdirSync(path); console.log('删除成功') }}deleteFolder(path);
执行外部脚本// 须在Linux环境执行 win系统可以用git bashvar { execSync } = require('child_process');var path = require("path");var originFolder = path.resolve(__dirname, "origin");var nowFolder = path.resolve(__dirname, "now");try { execSync(`cp -r ${originFolder} ${nowFolder} `) console.log("复制成功")} catch (e) { console.log("复制失败:"+e.message)}
休眠// 休眠十秒var { spawn } = require("child_process")spawn("sleep", ['10'])
json文件解析
美化打印/** * @param1 待序列化对象 * @param2 是否显示更多的隐藏信息 * @param3 递归深度,默认2,设置null则不限制递归层级 * @param4 颜色显示 * */var util=require('util');var obj={ name:"tom", age:18, hobby:['吃饭','睡觉','打豆豆']} console.log(util.inspect(obj,true,2,true));
美化打印
文件拷贝var fs = require('fs')function fileCopy(src, target) { const readStream = fs.createReadStream(src)//源文件路径 const writeStream = fs.createWriteStream(target)//目标文件路径 readStream.pipe(writeStream);}fileCopy('./1.txt', './2.txt')
文件名处理//获取自定义格式的文件名const path = require('path');const getFileName = (filepath, type = 1) => { let result = ''; if (type === 1) { result = path.basename(filepath); } else if (type === 2) { result = path.extname(filepath); } else { let basename = path.basename(filepath); let extname = path.extname(filepath); result = basename.substring(0, basename.indexOf(extname)); } return result;}// console.log(getFileName("./date.js", 1))//date.js// console.log(getFileName("./date.js", 2))//.js// console.log(getFileName("./date.js", 3))//date
对称加密和解密
加密
//cipher加密算法function cipher(str){ try{ const crypto = require('crypto'); /** * --创建 Cipher 实例。 不能使用 new 关键字直接地创建 Cipher 对象 * --crypto.createCipher,@param1 算法,@param2 密文,@param3 向量--可为""或省略 */ const cipher = crypto.createCipher('aes128', '冷月心'); /** * update方法 * @param1 加密的数据 * @param2 数据编码格式,一般为utf8 * @param3 输出格式,一般为 'base64' 或者 'hex',缺省返回Buffer */ let encrypted = cipher.update(str, 'utf8', 'hex'); /** * final方法,返回加密后结果 * @param 返回值的字符编码 ,一般为 'base64' 或者 'hex',缺省返回Buffer * -- 一旦 cipher.final() 方法被调用, Cipher 对象就不能再用于加密数据。 * -- 如果试图再次调用 cipher.final(),将会抛出一个错误。 */ encrypted += cipher.final('hex'); return encrypted; }catch(e){ console.log('加密失败'); return e.message ; } }const result=cipher('清风明月晓星尘') ;console.log(result)//fa0bb8ac7f40bfdc925bd24ae2aacc04ac89740c0bd6dfe51213d9e66a8e0360
解密
function decipher(encrypted){ try{ const crypto = require('crypto'); const decipher = crypto.createDecipher('aes128', '冷月心') let decrypted = decipher.update(encrypted, 'hex', 'utf8'); decrypted += decipher.final('utf8'); return decrypted; }catch(e){ console.log('解密失败'); return e.message; }}const result=decipher('fa0bb8ac7f40bfdc925bd24ae2aacc04ac89740c0bd6dfe51213d9e66a8e0360'); console.log(result)//清风明月晓星尘
三种常用加密算法var crypto = require("crypto");//自己利用node自带的crypto模块封装出来的md5加密函数,传入初始密码,返回加密后密码function my_md5(initPWD){ var md5 = crypto.createHash('md5');//创建哈希加密算法,后边可以是md5,sha1,sha256等 var password = md5.update(initPWD).digest('base64');//也可以用hex return password;}//测试console.log("加密前:123456");console.log("加密后:"+my_md5(my_md5("123456")));
md5双重加密
sha1双重加密
sha256双重加密