实战|nodejs fs模块结合async await处理fs异步使用

判断服务器上有没有upload目录 如果没有创建这个目录 有的话不操作 1.方式1

【实战|nodejs fs模块结合async await处理fs异步使用】注意 即便没有这个目录但是也要看下有没有同名的无后缀的文件做干扰
实战|nodejs fs模块结合async await处理fs异步使用
文章图片

**判断服务器上有没有upload目录 如果没有创建这个目录 有的话不操作** const fs = require('fs'); var path = './upload'; fs.stat(path, (err, stat) => { if (err) {//没有这个文件 dir(path); return; } if (!stat.isDirectory()) {//没有这个目录 //判断是否有这个文件(因为没有后缀的文件和文件夹不能重名)上图所示 if (stat.isFile()) {//有这个没有后缀的文件 fs.unlink(path, (err) => {//删除这个没有后缀的文件 if (!err) { console.log('删除文件成功'); dir(path)//创建目录 } }) } else {//没有这个目录,也没有这个后缀的文件 dir(path)//创建目录 } } else { console.log('有upload目录'); } }) //封装函数创建目录 function dir(dir) { fs.mkdir(dir, (err) => { if (err) { return } console.log('创建upload目录'); }) }

2.使用npm包快速实现功能
https://www.npmjs.com/package/mkdirp
1. npmi mkdirp--save/ cnpm i mkdirp --save 2. const mkdirp=require('mkdirp') 3.使用 mkdirp('./upload').then(made => console.log(`made directories, starting with ${made}`) )

判断wwwrouter下的文件是不是一个目录 是的话追加到数组中 1.方法1:
const fs = require('fs'); let path = './wwwroot'; let arr = []; fs.readdir(path, (err, data) => { if (err) { throw err } for (let i = 0; i < data.length; i++) { fs.stat(`${path}/${data[i]}`, (err, state) => { if (err) { throw err } if (state.isDirectory()) { arr.push(data[i]) } if (i == data.length - 1) { console.log(arr) } }) } })

方法2,function函数自调用递归
const fs = require('fs'); let path = './wwwroot'; let arr = []; fs.readdir(path, (err, data) => { if (err) { throw err } (function main(i) { if (i == data.length) { console.log(arr) return; } fs.stat(`${path}/${data[i]}`, (err, state) => { if (state.isDirectory()) { arr.push(data[i]) } main(++i) }) })(0) })

方法3.es6 new Promise es7 async await
async让方法变为异步返回promise await 等待异步方法执行完
await必须写在async内两者配合使用
const fs = require('fs'); // 封装一个专门使用判断是否为目录的函数 async function dir(path) { return new Promise((resolve, reject) => { fs.stat(path, (err, data) => { if (err) { throw err } if (data.isDirectory()) { resolve(true) } else { resolve(false) }}) }) }// 专门封装一个循环获取目录的函数 function main() { let path = './wwwroot' let arr = []; fs.readdir(path, async (err, data) => { for (var i = 0; i < data.length; i++) { await dir(`${path}/${data[i]}`).then(res => { if (res) { arr.push(data[i]) } }) } console.log(arr)}) } main()

    推荐阅读