节点 JS:将音乐元数据存储在 JSON 上

Node JS: storing music metadata on JSON

本文关键字:存储 JSON 元数据 音乐 JS 节点      更新时间:2023-09-26

我是 Node JS 中的一个乞丐,我在尝试构建 JSON 对象时遇到了麻烦。

我找到了一个模块来查找 mp3 文件的元数据,我想将此信息存储在 JSON obj 上。

我的应用程序的行为如下:

  1. 阅读我的"音乐"目录。
  2. 对于目录上的每个文件,提取他的信息并将其存储在结构"jsonSong"中。将"jsonSong"推入名为"jsonObj"的结构中。
  3. 制作一个控制台.log"jsonObj"以查看结果。

代码如下:

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"似乎是空的,这是最后一个控制台的结果.log(我的音乐目录上有 3 首歌,所以我在结构上有 3 个条目):

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

谢谢你的时间。

在填充数据之前,您必须等待回调执行,您可以使用 done 事件。

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