2016-08-30 12 views
0

私はfilenameとfileStatでオブジェクトを作成したいので、下のコードでは、私はasyncでファイル名を調べていますが、今度はreadDirを使っています。どのようにしてオブジェクトの配列を作成できますか?私はファイル名とその作成された日付を取得し、それをクライアントに送信しようとしていますobjToReturn。どのように私はその仕事を達成することができますか?2つの異なるfsメソッドからオブジェクトを作成するには?

app.js

function readDirectory(callback) { 
    var dirPath = './logs/ditLogs'; 
    //this will get you list of all files. in directory 
    var files = fs.readdirSync(dirPath); 
    var objToReturn = [{ 
     fileName: '', 
     fileStat: '' 
    }]; 
    //then using async do like this 
    async.eachSeries(files, function(file, callback) { 
     var filePath = path.join(dirPath, file); 
     fs.stat(filePath, function(err, stats) { 
      objToReturn.fileStat = stats; 
      //write stats data into objToReturn 
      fs.readdir(path, function(err, items) { 
       objToReturn.filename = items; 
      }); 

      callback(); 
     }); 
    }, function(err) { 
     //final callback when all files completed here send objToReturn to client 
     callback(objToReturn); 
    }); 
+0

あなたは配列に 'stats'と' items'を保存したいわけ? – abdulbarik

+0

yesディレクトリ内の各ファイルのオブジェクト統計情報と項目の配列 – hussain

+0

これが有効な場合は、回答を受け入れる必要があります。 – abdulbarik

答えて

1

さて、私はあなたがここで何をしようとしているのか分かりました。指定したディレクトリ内のすべてのファイルパスを読み込み、各ファイルに対して、この情報を指定のコールバックに返す前に情報を収集する必要があります。現在、各オブジェクトではなくobjToReturnの配列にこれらの小道具を追加し、それをobjToReturnにプッシュすると表示されます。このようにして、各非同期読み取りのプロパティを上書きします。

また、fs.readdir(path, function(err, items) {を使用してください。先に宣言したfilePathを参照することを意味します。

ような何か試してみてください:

async.eachSeries(files, function(file, callback) { 
    var filePath = path.join(dirPath, file); 
    var fileInfo = {}; 
    fs.stat(filePath, function(err, stats) { 
     fileInfo.fileStat = stats; 
     //write stats data into objToReturn 
     fs.readdir(filePath, function(err, items) { 
      fileInfo.filename = items; 
     }); 
     objToReturn.push(fileInfo); 
     callback(); 
    }); 
}, function(err) { 
+0

エラー 'fileInfo.push(fileInfo);が返されました。 TypeError:fileInfo.pushは関数ではありません。 – hussain

+0

私はエラーを修正しましたが、ファイルの統計情報しか表示されません。オブジェクトのファイル名は表示されません。 – hussain

+0

Javascriptオブジェクトには、配列のみの.push()はありません。上記のコードは空のオブジェクトとして定義されたfileInfoを示しているので意味があります。代わりに '[]'配列にプッシュしてみてください。 最近のコードを含めるように回答を編集できますか?何が変わったのか分からずにデバッグするのは難しいです。また、オブジェクトに割り当てる前に 'items'をログに記録してみてください。 – broguinn

0

あなたはこれを試すことができます。これは動作するはずです

function readDirectory(callback) { 
    var dirPath = './logs/ditLogs'; 

    //this will get you list of all files. in directory 
    var files = fs.readdirSync(dirPath); 
    var objToReturn = []; 

    //then using async do like this 
    async.eachSeries(files, function(file, callback) { 
     var filePath = path.join(dirPath, file); 

     fs.stat(filePath, function(err, stats) { 
      objToReturn.fileStat = stats; 

      //write stats data into objToReturn 
      fs.readdir(path, function(err, items) { 
       objToReturn.filename = items; 
       objToReturn.push({ 
        fileName: items, 
        fileStat: stats 
       }) 
      }); 

      callback(); 
     }); 
    }, function(err) { 
     //final callback when all files completed here send objToReturn to client 
     callback(objToReturn); 
    }); 
} 

希望。

関連する問題