Javascript meteor js-动态扫描文件夹并添加到集合
我不熟悉meteor和javascript,我正在尝试让应用程序搜索mp3文件夹,然后将位置和名称添加到集合中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
如果有预先存在的(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);
}