2014-04-06 2 views
1

저는 노드 JS의 초보자이며 JSON 개체를 만드는 데 문제가 있습니다.노드 JS : JSON에 음악 메타 데이터 저장

mp3 파일의 메타 데이터를 찾기위한 모듈을 찾았으며이 정보를 JSON obj에 저장하려고합니다.

내 applicaiton의 동작은 다음과 같다 :

  1. 내 "음악"디렉토리를 읽어보십시오.
  2. 디렉토리의 각 파일에 대해 정보를 추출하여 구조 "jsonSong"에 저장하십시오. "jsonSong"을 "jsonObj"구조로 푸시합니다.
  3. "jsonObj"라는 console.log를 만들어 결과를 확인하십시오. 여기

코드입니다 :

var fs = require('fs'); 
var mm = require('musicmetadata'); 

fs.readdir('./music/', function(err,files) { 
    if(err) throw err; 
    var jsonObj = { 
        songs: [] 
       }; 
    files.forEach(function(file){ 
     var jsonSong = { 
         title:"", 
         artist:"", 
         duration:"", 
         pic:"" 
        } 
     var parser = new mm(fs.createReadStream('./music/'+file)); 
     parser.on('title', function(result) { 
      jsonSong.title = result; 
     }); 
     parser.on('albumartist', function(result) { 
      jsonSong.artist = result; 
     }); 
     parser.on('duration', function(result) { 
      jsonSong.duration = result; 
     }); 
     parser.on('picture', function(result) { 
      jsonSong.pic = result; 
     }); 

     jsonObj.songs.push(jsonSong); 
    }); 
    console.log(jsonObj); 
}); 

여기 내 문제는 "jsonSong는"그래서 (나는 내 ​​음악 디렉토리에 3 곡이 여기에 마지막 CONSOLE.LOG의 결과가있어, 빈 것 같다입니다 나는 구조에 3 개의 입장이있다) :

{ songs: 
    [ { title: '', artist: '', duration: '', pic: '' }, 
    { title: '', artist: '', duration: '', pic: '' }, 
    { title: '', artist: '', duration: '', pic: '' } ] } 

시간 내 주셔서 감사합니다.

답변

0

데이터가 채워지기 전에 콜백이 실행되기를 기다려야 할 때 done 이벤트를 사용할 수 있습니다.

parser.on('done', function (err) { 
    console.log(jsonObj); 
}); 
+0

오, 루키 실수. 감사 :) – user3504315