node.js模块:为什么files数组为null

时间:2013-11-10 11:57:27

标签: javascript node.js

我一直在学习node.js,我有这样的例子:

lesson6_module.js

var fs = require('fs');

module.exports = function (dir, regexFilter, callback) {
  fs.readdir(dir, function(err, files) {
    console.log('files.length ' + files.length);
    if (!err) {
      return callback(err, null);
    }
    var filteredFiles = [];
    files.forEach(function(file) {
      if (regexFilter.test(file)) {
        filteredFiles.push(file);
      }
    });
    console.log('filteredFiles.length ' + filteredFiles.length);
    callback(null, filteredFiles);
  });
};

lesson6.js

var lm6 = require('./lesson6_module.js');

var dir = process.argv[2];
var regex = new RegExp('\\.' + process.argv[3] + '$');
lm6(dir, regex, function(err, files) {
  files.forEach(function(file) {
    console.log(file);
  });
});

当我运行它时,我得到这样的错误:

D:\devhome\nodejs\learn>node lesson6.js testdir txt
files.length 2

D:\devhome\nodejs\learn\lesson6.js:6
  files.forEach(function(file) {
        ^
TypeError: Cannot call method 'forEach' of null
    at D:\devhome\nodejs\learn\lesson6.js:6:9
    at D:\devhome\nodejs\learn\lesson6_module.js:7:14
    at Object.oncomplete (fs.js:107:15)

有什么问题?

1 个答案:

答案 0 :(得分:0)

这是一个简单的错误(感谢@Sirko的评论,我抓住了它更快):

if (!err) {
  return callback(err, null);
}

应该是:

if (err) {
  return callback(err, null);
}