nodejs fs.readdir的问题

从node.js + express4 写一个自己的博客网站教程中写代码,发现获取所有文件夹下的文件,最终结果如何在外面得到呢??return 返回的不是getBlogList的返回值吧?

jsfunction getBlogListblogDir { fs.readdirblogDir, function err, files { var blogList = []; if files && files.length { files.forEachfunction filename { //split file name and generate url... //... //create a blogItem { title: blogTitle, url: blogUrl } blogList.pushblogItem; }; } return blogList; };
}

刚接触node,疑惑很久,请各位赐教~谢谢

你可以从下面几种方式里选个,第一个最传统,第四个最优雅(但现在用不了),第三个的优雅度仅次于第四个,过渡期间的作法,第二个使用较为广泛,而且有多种变体。

//经典的callback写法
function getBlogListblogDir,callback { fs.readdirblogDir, function err, files { iferr{ callbackerr; return; } var blogList = []; if files && files.length { files.forEachfunction filename { //split file name and generate url... //... //create a blogItem { title: blogTitle, url: blogUrl } blogList.pushblogItem; }; } callbacknull,blogList; };
} // 使用方法 getBlogList"/",functionerr, blogList{ //这里就可以用 blogList
}
javascript// 第二种写法,Promise
function getBlogListblogDir { return new Promisefunctionresolve,reject{ fs.readdirblogDir, function err, files { iferr rejecterr; var blogList = []; if files && files.length { files.forEachfunction filename { //split file name and generate url... //... //create a blogItem { title: blogTitle, url: blogUrl } blogList.pushblogItem; }; } resolveblogList; }; }
} // 使用方法 var bloglistP= getBlogList"/";
bloglistP.thenfunctionblogList{ //这里就可以用 blogList
} 
javascript// 第三种写法,生成器yield模式,需要co或者koa来配合,需要node>=0.11.0
var co=require"co",thunkify=require"thunkify";
var readdir= thunkifyfs.readdir;
function* getBlogListblogDir { var files= yield readdirblogDir; var blogList = []; if files && files.length { files.forEachfunction filename { //split file name and generate url... //... //create a blogItem { title: blogTitle, url: blogUrl } blogList.pushblogItem; }; } return blogList; } //使用方法
cofunction*{ //这里就可以用 blogList var blogList=yield getBlogList"/";
}
javascript// ES7的async/await模式,目前node不支持,只是演示
async function getBlogListblogDir { var files= await fs.readdirblogDir; var blogList = []; if files && files.length { files.forEachfunction filename { //split file name and generate url... //... //create a blogItem { title: blogTitle, url: blogUrl } blogList.pushblogItem; }; } return blogList; } // 使用方法
// 这里就可以用 blogList
var blogList=await getBlogList"/";

楼上的是正解。 补充一个 简单粗暴的方法

var fs = requirefs
function getBlogListblogDir { return fs.readdirSyncblogDir
}
var files = getBlogList/;
console.logfiles

发表评论

电子邮件地址不会被公开。 必填项已用*标注