在Node.js中使用fs.readdir()列出文件时遇到问题

时间:2014-11-30 19:35:16

标签: javascript node.js asynchronous callback

我正在通过“Learn You The Node.js For Much Win!”研讨会,但我在练习时遇到了麻烦5.它要求你Create a program that prints a list of files in a given directory, filtered by the extension of the files.

我传入了目录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运行时,我的当前代码不会输出任何内容。我错过了一些异步原理吗?我错误地使用了回调吗?任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:3)

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');

答案 1 :(得分:0)

此代码的另一个问题是,它将使用' .json'来打印文件。延期。因此,您应该使用正则表达式而不是indexOf。像这样:

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