所以,我想在我的服务器上访问名为music的文件中的所有mp3。然后我想把它们放在一个列表中,让用户播放歌曲。我可以使用Node做到这一点,但我希望能够在我的服务器上运行服务器的情况下做到这一点。因此,我想在不使用Node的情况下执行此操作,而是使用我已经运行的java脚本。我知道我可以使用
访问一个文件$.get('music/filename.mp3', function(data){
//var music = $('item', data);
console.log(data);
});
但是当我说
时$.get('music/*.mp3', function(data){
//var music = $('item', data);
console.log(data);
});
它没有用。有谁知道怎么做?
为了报复,这就是我目前正在做的事情。
router.get('/getMusic', function(req, res, next) {
fs.readdir('./public/music/', function(err, files) {
if (err) throw err;
console.log('Sent result: ' + files);
res.status(200).json(files);
})
});
的javascript
$.getJSON('/getMusic', function(json) {
var options = '<option value=""></option>';
$.each(json, function(i, item) {
options += '<option value="' + item + '">' + item + '</option>';
});
$('#songs').html(options);
})
.done(function() { console.log('getMusic getJSON request succeeded!'); })
.fail(function(jqXHR, textStatus, errorThrown) {
console.log('getMusic getJSON request failed! ' + textStatus);
console.log('incoming ' + jqXHR.responseText);
})
.always(function() { console.log('getMusic getJSON request ended!');
});
答案 0 :(得分:0)
来自浏览器的JavaScript(我假设您的意思是使用不带节点的JavaScript)无法以与Node不同的方式访问您的文件系统。
特别是,它无法在fs.readdir()
路由中执行/getMusic
次呼叫。为此,您必须拥有Node或其他服务器。
如果您的底层(非节点)服务器(可能是nginx或Apache)配置为搜索music
目录的目录列表,则可以读取它,解析它,然后将其用于音乐列表。虽然,这可能有点乱。
至于实际下载音乐,你不能做通配符。您必须直接遍历每个文件,就像您在第一个文件中一样:$.get('music/some-file.mp3')
。
答案 1 :(得分:0)
某处,已有一台服务器响应:
$.get('music/filename.mp3?ext=mp3', ...)
您需要修改该服务器,使其支持指定所需通配符搜索的其他URL。其他URL可以是查询参数,也可以是指定要查找的通配符的路径,然后返回所需的数据:
您没有显示已经支持$.get('music/filename.mp3',
的服务器端代码,但这是您开始的地方。创建一个新路由,接受通配符作为参数(作为查询字符串或请求路径的一部分),然后在该路由中实现通配符行为以返回客户端所需的数据。
例如,您可以在/ getMusic路由上创建一个可选的查询参数,以允许您指定扩展名:
/* -----------------------------------------------------------
/getMusic gets all music files in the public music directory
/getMusic?ext=mp3 gets only music files with that extension
----------------------------------------------------------- */
router.get('/getMusic', function(req, res, next) {
fs.readdir('./public/music/', function(err, files) {
if (err) {
res.status(500).send("fs.readdir() error");
return;
}
if (req.query.ext) {
// filter files to see if they match the extension in the query parameter
files = files.filter(function(f) {
return f.slice(-req.query.ext.length) === req.query.ext;
});
}
console.log('Sent result: ' + files);
res.status(200).json(files);
})
});