meteor js - 动态扫描文件夹并添加到集合中

时间:2015-09-13 20:42:52

标签: javascript node.js meteor

我是meteor和javascript的新手,我正在尝试让应用程序搜索mp3文件夹,然后将位置和名称添加到集合中。

如果有预先存在的(javascript)方法,请告诉我在哪里可以找到它们。如果您也知道可以通过大气或git repo进行改装,请告诉我。谢谢!

1 个答案:

答案 0 :(得分:1)

这是解决您要做的事情的简单方法

mp3list.html:

<head>
  <title>MP3 Collection</title>
</head>

<body>
  {{> mp3list}}
</body>

<template name="mp3list">
  <ul>
    {{#each mp3s}}
      <li>{{name}}</li>
    {{/each}}
  </ul>
</template>

mp3list.js

MP3s = new Mongo.Collection('mp3s');
MP3_DIRETORY = '/tmp/mp3';
INTERVAL_MILLISECONDS = 1000;

if (Meteor.isClient) {
  Template.mp3list.helpers({
    mp3s: function() {
      return MP3s.find();
    },
  });
}

if (Meteor.isServer) {
  var fs = Npm.require('fs');
  Meteor.setInterval(function() {
    var mp3s = fs.readdirSync(MP3_DIRETORY).filter(
      function(i) {
        return i.substr(i.length - 4) === '.mp3';
      }
    );
    mp3s.forEach(function(i) { MP3s.upsert({name: i}, { $set: {name: i}}); });

  }, INTERVAL_MILLISECONDS);
}

为了扩展这一点(即递归目录搜索),答案here提供了更多细节。 但是,如果您的应用扫描大量文件,这种简单的方法将无法扩展。我建议然后查看基于ionotify的解决方案(假设linux,其他操作系统将具有类似的API)。 watchr
也许是一个不错的选择(我没有使用它,或者inotify ++)。