在Node.js中用fs.readdir()列出文件时遇到麻烦

我正在通过“ 学习Node.js获得很多胜利! ”工作坊的方式工作,但我在练习5时遇到了麻烦。它要求您Create a program that prints a list of files in a given directory, filtered by the extension of the files.

我传入了包含各种JavaScript,Ruby和纯文本文件的目录,文件。 它应该是console.log()每个扩展名为.js文件。

 var fs = require('fs'); function indexDirectory(directory) { fs.readdir(directory, function(err, files) { for (var i in files) { if (i.indexOf('.js') != -1) { console.log(files[i]); } } }); } indexDirectory('files'); 

我当前的代码不会输出任何东西,当我运行node program.js 。 我是否缺less一些asynchronous原理? 我使用callback不正确吗? 任何帮助,将不胜感激 :)

files是数组,你应该使用forEach而不是for .. in

 var fs = require('fs'); function indexDirectory(directory) { fs.readdir(directory, function(err, files) { files.forEach(function (file) { if (file.indexOf('.js') != -1) { console.log(file); } }); }); } indexDirectory('files'); 

这个代码的另外一个问题是它也会打印'.json'扩展名的文件。 因此,而不是indexOf你应该使用,例如,正则expression式。 像这样的东西:

 var matches = new RegExp(".js$").test(files[i]); if (matches) { console.log(files[i]); }