node也学习了几天,今天讲解一下刚学习的小案例!使用fs模块fs.readdir读取只能目录下文件,筛选文件和文件夹
案例代码
//遍历出是文件夹的文件,把异步变为同步方法!
const http=require('http');
const fs=require('fs')
const server=http.createServer(function(req,res){
res.writeHead(200,{"content-type":"text/html;charset=UTF8"})
//存放文件夹的数组
fs.readdir('../album',function(err,files){
var wenjianjia=[];
//fs.readdir//读取album目录下所有的文件和文件夹
// 迭代器强行把异步方法改变为同步,先执行1执行完毕后执行2,以此执行
(function iterator(i){
//遍历结束:i和文件的长度一样时候
if(i==files.length){
console.log(wenjianjia);
return;
}
fs.stat("../album/"+files[i],function(err,stats){
if(stats.isDirectory()){
wenjianjia.push(files[i])
}
iterator(i+1)
})
})(0)
})
res.end('ok')
})
//监听端口
server.listen(3000,"127.0.0.1");
fs.readdirAPI简单介绍
fs.readdir('../album',function(err,files){
console.log(files)
}
列出目录下的所有文件和文件夹
fs.stat介绍(检测文件状态可以判断是文件或者文件夹)
fs.stat(filesname,callback),回调函数中两个参数err,和stats,stats有个isDirectory属性,可以判断是否为文件夹
然后pull到数组就ok!
之前讲述的node的非阻塞I/O( no blocking I/O),会进行异步读取!所以没有读取完成则进行下一个(读取文件判断,下面的语句);这样不是我们所需要的,那么就要使用一个迭代器,强制异步变为同步!
使用迭代器iterator
function iterator(i){
//结束遍历
if(i ==files.length){
console.log(wenjainjia) ;
return;
}
//检测文件
......
//检测完成后执行
iterator(i+1)
}(0)