Nodejs模块导出返回undefined

时间:2017-02-05 14:08:05

标签: node.js

我使用recursive-readdir模块列出目录中的所有文件类型,下面的代码可以工作,但是我的数组之前显示“未定义”。

下面的代码插入到js文件“test.js”中,并使用“node test.js”从cmd行运行。

有关如何在不返回未定义字符串的情况下最好返回所有必需文件数组的任何建议?

    const recursive = require('recursive-readdir');
    exports.file = function() {
      recursive(__dirname, ['!*.md'], function(error, files) {
       var arr = [];
        for (var i = 0; i < files.length; i++) {
          arr.push(files[i]);
        }
        console.log(arr);
      });
    };
    console.log( exports.file() );

1 个答案:

答案 0 :(得分:1)

如评论exports.file中所述,没有返回值,这就是您尝试登录时获得undefined的原因。

如果您希望exports.file的调用者能够访问这些文件,则需要更新exports.file以进行可以使用这些文件作为参数调用的回调。

const recursive = require('recursive-readdir');
exports.file = function(callback) {
  recursive(__dirname, ['!*.md'], function(error, files) {
   var arr = [];
    for (var i = 0; i < files.length; i++) {
      arr.push(files[i]);
    }
    console.log(arr);
    callback(error, arr);
  });
};

exports.file(function(error, files) {
  console.log(files);
});

这将记录文件,只需对原始代码进行最少的更改。

根据您需要如何进化此代码,您可以简化这一点。首先,除了arr之外,您真的需要files吗?如果没有,您只需将files传递给回调:

const recursive = require('recursive-readdir');
exports.file = function(callback) {
  recursive(__dirname, ['!*.md'], function(error, files) {
    callback(error, files);
  });
};

exports.file(function(error, files) {
  console.log(files);
});

现在,由于您回调recursive只是调用exports.file的回调,您只需将exports.file回调传递给recursive

const recursive = require('recursive-readdir');
exports.file = function(callback) {
  recursive(__dirname, ['!*.md'], callback);
};

exports.file(function(error, files) {
  console.log(files);
});