Nodejs模块导出返回undefined

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

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

任何build议如何最好的返回所有需要的文件数组没有返回未定义的string?

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

正如注释中所提到的那样, exports.file没有返回值,这就是为什么当你尝试logging时你得到了undefined原因。

如果您希望exports.file的调用方能够访问这些文件,则需要更新exports.file以接受可以将这些文件作为参数调用的callback。

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

这将以原始代码的最小更改logging这些文件。

根据你如何需要这个代码来演化,你可能会简化一下。 首先,除了files之外,你真的需要吗? 如果没有,您可以简单地传递files到callback:

 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的callbackexports.file ,所以你可以简单地将exports.filecallbackexports.file传递给recursive exports.file

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