Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript meteor js-动态扫描文件夹并添加到集合_Javascript_Node.js_Meteor - Fatal编程技术网

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

Javascript meteor js-动态扫描文件夹并添加到集合,javascript,node.js,meteor,Javascript,Node.js,Meteor,我不熟悉meteor和javascript,我正在尝试让应用程序搜索mp3文件夹,然后将位置和名称添加到集合中 如果有预先存在的(javascript)方法,请告诉我在哪里可以找到它们。如果您还知道atmospherejs或git回购可能会改装什么,也请让我知道。谢谢大家! 这里有一个简单的方法来解决你想做的事情 mp3list.html: <head> <title>MP3 Collection</title> </head> <bo

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


如果有预先存在的(javascript)方法,请告诉我在哪里可以找到它们。如果您还知道atmospherejs或git回购可能会改装什么,也请让我知道。谢谢大家!

这里有一个简单的方法来解决你想做的事情

mp3list.html:

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

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

<template name="mp3list">
  <ul>
    {{#each mp3s}}
      <li>{{name}}</li>
    {{/each}}
  </ul>
</template>
为了扩展此功能(即递归目录搜索),答案提供了更多详细信息。 但是,如果你的应用程序正在扫描大量文件,这种简单的方法将无法扩展。我建议再看看基于API的解决方案(假设linux和其他操作系统都有类似的API)

也可能是一个不错的选择(我没有使用过它,或者inotify++)。

谢谢你的代码!。但是,我在服务器端遇到了错误:setInterval回调中出现异常:错误:enoint,没有这样的文件或目录“/tmp/mp3”。我尝试了不同版本的“/”或者也没有“/”。这些都不起作用。这不可能是权限问题,是吗?此外,mp3不会从该目录播放,只能从/public/播放。使用相对路径(以./or../或类似路径开头)或完整路径时,您是否看到一些错误?如果是相对路径,那么meteor进程的(节点)工作目录可能与您期望的不同(它不是您键入meteor的目录,也不是您项目的根目录)。默认情况下,服务器进程的工作目录为PROJECTDIR/.meteor/local/build/programs/server。启动Meteor shell并使用以下命令进行探索:process.cwd()-显示当前工作目录,process.chdir('/tmp')-更改工作目录。是的,工作目录是完整的本地路径。process.chdir('/tmp')抛出许多错误消息。所以我只是通过5'../'设置了相对路径,以便从PROJECTDIR目录读取它。用户将使用自己的文件,而不是从异地服务器提供的文件。所以我想这应该是一个客户端的过程?在客户端上这样做完全是另一个问题。出于安全原因,Web浏览器无法访问文件系统api,但如果您使用cordova创建移动应用程序,则有用于访问文件系统的api,但您需要提供有关您的要求的更多详细信息(这是一个新问题)。关于enonent错误,我建议您使用完整路径。如果您在Meteor Shell中尝试此操作失败,您可以发布命令和错误,我将尝试提供更多帮助。
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);
}