676670
我想遍历存放markdown文件的目录,文件目录可能会有很多级,忽略隐藏目录(例如.git),最终目的是取出这个目录中所有的.md文件,返回包含这些文件绝对路径的数组。
// fs-promise.js
const fs = require('fs')
exports.readdir = function(dir){
return new Promise((resolve,reject) => {
fs.readdir(dir,(err,docs) => {
if(err){
reject(err)
return
}
resolve(docs)
})
})
}
exports.readFile = function(file,options){
return new Promise((resolve,reject) => {
fs.readFile(file,options,(err,data) => {
if(err){
reject(err)
return
}
resolve(data)
})
})
}
exports.readFiles = function(files,options){
let arr = []
for(let i=0;i<files.length;i++){
arr.push(new Promise((resolve,reject) => {
fs.readFile(files[i],options,(err,data) => {
if(err){
reject(err)
return
}
resolve([files[i],data])
})
}))
}
return arr
}
exports.stat = function(file){
return new Promise((resolve,reject) => {
fs.stat(file,(err,stats) => {
if(err){
reject(err)
return
}
resolve(stats)
})
})
}
exports.stats = function(files){
let arr = []
for(let i=0;i<files.length;i++){
arr.push(new Promise((resolve,reject) => {
fs.stat(files[i],(err,stats) => {
if(err){
reject(err)
return
}
resolve([files[i],stats])
})
}))
}
return arr
}
exports.writeFile = function(file,data,options){
return new Promise((resolve,reject) => {
fs.writeFile(file,data,options,(err) => {
if(err){
reject(err)
return
}
resolve()
})
})
}
exports.writeFiles = function(files,data,options){
let arr = []
for(let i=0;i<files.length;i++){
arr.push(new Promise((resolve,reject) => {
fs.writeFile(files[i],data,options,(err) => {
if(err){
reject(err)
return
}
resolve()
})
}))
}
return arr
}
//walk.js
const fs = require('./fs-promise')
,{resolve} = require('path')
,_ = require('lodash')
,re1 = /\.md$/
,re2 = /\/\./
const walk = async function(dir,mdList=[]){
const docs = await fs.readdir(dir)
_.forEach(docs,(doc,idx) => {
docs[idx] = resolve(dir,doc)
})
let props = await Promise.all(fs.stats(docs))
_.forEach(props,(prop) => {
let filename = prop[0]
,stat = prop[1]
if(stat.isFile() && re1.test(filename) && !re2.test(filename)){
mdList.push(filename)
}else if(stat.isDirectory() && !re2.test(filename)){
walk(filename,mdList)
}
})
}
walk('/home/cheng/node_projet/note')
现在问题就是我怎么取出mdList?