【问题标题】:Trouble listing files with fs.readdir() in Node.js在 Node.js 中使用 fs.readdir() 列出文件时遇到问题
【发布时间】:2015-01-28 19:19:15
【问题描述】:

我正在努力完成“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 运行当前代码时,它不会输出任何内容。我错过了一些异步原则吗?我是否错误地使用了回调?任何帮助将不胜感激:)

【问题讨论】:

  • A for in 循环遍历键,而不是值;不要在数组上使用它。 files.forEach(function (i) { … })。另请参阅stackoverflow.com/questions/500504/…
  • for (var i = 0, file; i < files.length; i++) { file = files[i]} || files.forEach(function (file) {}); || files.filter(function(file){ return FILE_IS_JS; });
  • @minitech 谢谢!这是有道理的

标签: javascript node.js asynchronous callback


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    此代码的另一个问题是它还会打印带有“.json”扩展名的文件。因此,您应该使用例如正则表达式而不是 indexOf。像这样的:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      • 2012-08-07
      • 1970-01-01
      • 2022-11-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多