遍历mp3文件名数组并将id3标签提取到nodejs中的另一个数组中
Posted
技术标签:
【中文标题】遍历mp3文件名数组并将id3标签提取到nodejs中的另一个数组中【英文标题】:Loop through array of mp3 filenames and extract id3 tags in to another array in nodejs 【发布时间】:2016-05-11 01:59:26 【问题描述】:function extractId3(value, index, list)
if (path.extname(value) === '.mp3')
id3js( file: '/Users/user/materialApp/client/songs/' + value, type: id3js.OPEN_LOCAL , function(err, tags)
return tags.v2.image;
);
exports.index = function(req, res)
fs.readdir('/Users/user/materialApp/client/songs', function(err, files)
images = _.map(files, extractId3);
console.log(images);
res.json(files);
);
;
我对 web 开发和 nodejs 的异步特性相当陌生。
我正在尝试遍历我在 fs.readdir() 之后获得的所有 mp3 文件并从中提取 id3 标签。
console.log(images)
产生 []
。
我无法理解如何处理 id3js()
的异步性质。提取此信息并将其作为对此 http 请求的响应传递的正确方法是什么。
【问题讨论】:
id3js 返回什么?我会建议研究 Promise 并使用它们来构建你的数组 【参考方案1】:使用采摘
pluck _.pluck(list, propertyName) 可能是 map 最常见的用例:提取列表 属性值。
var stooges = [name: 'moe', age: 40, name: 'larry', age: 50, 名称:'卷曲',年龄:60]; _.pluck(stooges, 'name'); => [“萌”,“拉里”,“卷曲”]
images = _.pluck(files, extractId3);
【讨论】:
【参考方案2】:我可以让它工作的唯一方法是使用递归:
exports.index = function(req, res)
var info = new Array();
fs.readdir('/Users/user/materialApp/client/songs', function(err, files)
var mp3s = uscore.filter(files, function(file) if(path.extname(file) === '.mp3') return file);
var ID = 0;
console.log(mp3s.length);
if (ID < mp3s.length)
extractId3(mp3s[ID]);
else
console.log(info);
function extractId3(file)
id3js( file: '/user/user/materialApp/client/songs/' + file, type: id3js.OPEN_LOCAL , function(err, tags)
if(tags.title)
console.log(tags.v1);
info.push('file': file, 'title':tags.title, 'album':tags.album, 'year':tags.year);
ID++;
if (ID < mp3s.length)
extractId3(mp3s[ID]);
else
res.json(info);
);
【讨论】:
以上是关于遍历mp3文件名数组并将id3标签提取到nodejs中的另一个数组中的主要内容,如果未能解决你的问题,请参考以下文章
如何通过fileReference从本地上传的mp3中提取id3标签? (AS3)