2017-02-05 12 views
1

recursive-readdirモジュールを使用してディレクトリ内のすべてのファイルタイプを一覧表示していますが、以下のコードは機能しますが、配列の前に「未定義」が表示されます。Nodejsモジュールのエクスポートは未定義です

以下のコードはjsファイル "test.js"に挿入され、 "node test.js"を使用してcmd行から実行されます。

未定義の文字列が返されずに必要なすべてのファイルの配列を返す最良の方法についての示唆はありますか?あなたはそれをログに記録しようとすると、undefinedを得る理由です戻り値は、持っていないexports.fileコメントで述べたように

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

exports.fileコールバックを渡すことができ

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

そして:いない場合は、単にコールバックにfilesを渡すことができますexports.fileは何も返しません。だから 'console.log(exports.file());の代わりに' exports.file() 'を実行してください – Molda

+0

あなたの提案はよかったです。 – spec

答えて

1

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

これは、元のコードに最小限の変更を加えてファイルをログに記録します。

このコードをどのように進化させる必要があるかによって、おそらくこれをかなり単純化することができます。まず、filesに加えて、arrが本当に必要ですか? recursiveへのコールバックがちょうどexports.fileにコールバックを呼び出しますので、今、あなたは、単にためだrecursive

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

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

感謝@andyk両方の提案が良いところ。 – spec

関連する問題