判断服务器上有没有upload目录 如果没有创建这个目录 有的话不操作
1.方式1
注意 即便没有这个目录但是也要看下有没有同名的无后缀的文件做干扰
**判断服务器上有没有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. npm i 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()