判断服务器上有没有upload目录 如果没有创建这个目录 有的话不操作 1.方式1
【实战|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()
推荐阅读
- node|nodejs学习之旅--异步终极解决方案async和await--Ajax--浏览器访问网站的基本过程以及http详解
- Node.js|Nodejs 新特性 async await 的使用 以及使用 async await 处理异步
- Node.js工程师养成计划完毕
- Spring框架|Spring项目创建和Bean获取使用指南
- JAVA|Spring框架核心及设计思想
- C#|多次握手登录
- 前端|HTML基础
- 前端|浅谈函数式编程柯里化的魔法
- 前端优秀开源项目|Vexip UI - 新轮子推荐,由个人开发者打造的 Vue3 UI 组件库,免费开源、开箱即用