1、第一个 功能 判断服务器上面有没有upload目录,如果没有则创建,如果有则不改动
1)
- 第一个思路 手动写一个 这个方法
第一种方法有点问题 之后再看
const fs = require("fs");
const path = "./upload";
fs.stat(path,(err,data)=>{
if(err){
//创建目录
mkdir(path);
return;
}else{
if(!data.isDirectory()){
fs.unlink(path,err=>{
if(!err){
mkdir(path);
}else{
console.log('请检查输入')
}
//创建目录
})
}
}
})
// 创建目录
function mkdir(dir){
fs.mkdir(dir,(err)=>{
if(err){
console.log(err);
return;
}
})
}
- 第二个思路 使用 第三方包 mkdirp
- 新建 demo-mkdirp 并且 在这个文件夹 安装 npm i mkdirp
const mkdirp = require("mkdirp");
mkdirp('./upload').then(made =>
console.log(`made directories, starting with ${made}`))
- 执行 之后 就会生成 upload 这个文件夹 如果存在的情况 不会发生变化
2、有一个文件夹 wwwroot 里面有 image css js index.html 需要找到文件夹下面所有的目录并且放到数组中(文件除外)
1)
const fs = require("fs"); //引入fs
var path = "./wwwroot"; //方便定义
var dirArr = []; //初始化结果
//读目录
fs.readdir(path, (err, data) => {
if (err) {
console.log(err);
return;
}
// 这个一个立即执行函数
(function getDir(i) {
// 这个if是循环结束条件
if (i == data.length) {
console.log(dirArr);
return;
}
// 判断是目录还是文件
fs.stat(path + "/" + data[i], (error, stats) => {
if (stats.isDirectory()) {
dirArr.push(data[i]);
}
getDir(i + 1);
});
})(0);
});
3、 async await
1)先回顾几个东西
- ES6 块作用域
- 速写属性 key: value相同时 可写一个
- 模版语法 ·
${}· `` 用这个 包裹 - 复习一下 promise使用
如何拿到函数内部的数据???
function getData(resolve, reject) {
setTimeout(function () {
var name = "fhj";
resolve(name);
}, 1000);
}
// 传入 函数
var p = new Promise(getData);
p.then((data) => {
console.log(data); // 拿到内部数据 fhj
});
2)async await promise 使用方法
/*
1、await 必须包裹在 async里
2、async 函数 返回的是Promise 对象
*/
async function test() {
return new Promise((resolve, reject) => {
setTimeout(() => {
var name = "fhj";
resolve(name);
}, 1000);
});
}
async function main() {
var data = await test(); //获取异步方法里的数据
console.log(data); // fhj
}
main();
3)回顾一下 前面的一个问题 现在怎么处理??
写一个isDir 判断 是文件还是目录,并且将目录放进一个数组内
还是以 wwwroot 为例 将 wwwroot 文件夹拷贝到当前文件夹或者新建一下都可以的
// 1、isDir判断是目录-true 文件-false
const fs = require("fs");
async function isDir(path) {
return new Promise((resolve, reject) => {
fs.stat(path, (error, stats) => {
if (error) {
console.log(error);
reject(error);
return;
}
//判断是否是目录
if (stats.isDirectory()) {
resolve(true);
} else {
resolve(false);
}
});
});
}
// 2、获取 wwwroot 里面的所有资源 循环遍历
function main() {
var path = "./wwwroot";
var dirArr = []; //初始化结果
fs.readdir(path, async (err, data) => {
if (err) {
console.log(err);
return;
}
for (var i = 0; i < data.length; i++) {
if (await isDir(path + "/" + data[i])) {
dirArr.push(data[i]);
}
}
console.log(dirArr);
});
}
main(); //需要执行
- 你可以 尽情尝试一下