如何从使用gridFS存储的mongodb中读取mp3文件?

时间:2017-05-09 03:08:33

标签: node.js mongodb angular express ionic2

我的代码:

storeAudio.js

var mongoose = require('mongoose');
var fs = require('fs');
var Grid = require('gridfs-stream');
Grid.mongo=mongoose.mongo;


//establish mongoDB connection
 mongoose.Promise = global.Promise;
var conn = mongoose.createConnection('mongodb://localhost:27017/aHolyBoly');
conn.once('open',function(){
   var gfs = Grid(conn.db);
 // var db = new mongo.Db('aHolyBoly', new mongo.Server("127.0.0.1", 27017));
//var gfs = Grid(db, mongo);

var writeStream = gfs.createWriteStream({
    filename:'song1.mp3'
});
fs.createReadStream('../list/hero.mp3').pipe(writeStream);
writeStream.on('close',function(file){
    console.log(file.filename +'Written to db');
});
});

我的mp3文件已成功写入数据库。 现在我的目标是使用express创建路由,以便我可以使用它作为我的angular2应用程序中的提供程序的API。

server.js

var mongoose = require('mongoose');
var fs = require('fs');
var Grid = require('gridfs-stream');
Grid.mongo=mongoose.mongo;


//establish mongoDB connection
 mongoose.Promise = global.Promise;
var conn = mongoose.createConnection('mongodb://localhost:27017/aHolyBoly');
conn.once('open',function(){
   var gfs = Grid(conn.db);
 // var db = new mongo.Db('aHolyBoly', new mongo.Server("127.0.0.1", 27017));
//var gfs = Grid(db, mongo);

var writeStream = gfs.createWriteStream({
    filename:'song1.mp3'
});
fs.createReadStream('../list/hero.mp3').pipe(writeStream);
writeStream.on('close',function(file){
    console.log(file.filename +'Written to db');
});
});

在我的代码中的某处,我无法使用gridFS找到在Db中编写的歌曲。 gridFS API的链接gridFS API Link

我想使用ionic2创建一个包含搜索栏的应用程序,当我输入歌曲名称时,它会显示歌曲并且我可以播放它。

我在1周内挣扎了这3次写在堆栈上但无法得到答案。

1 个答案:

答案 0 :(得分:0)

我打赌你是服务器端web开发的新手,因为你的问题有点错过了创建node.js应用程序的全部要点。

编写服务器时,目标是服务器无法访问客户端计算机上的文件。这意味着您的应用程序充当瘦客户端。不要混淆node.js在您的计算机上运行:它创建了自己的模拟服务器,即使它位于您使用的同一台计算机上,它也可以作为一台真正遥远的计算机。出于这个原因,你无法修改项目库之外的文件,或者即使你可以修改它也不是什么node.js。

如果您想要一个专门修改计算机上文件的程序,您应该学习一种胖客户端编程语言,如C,C ++或Java。它们只能在您的计算机上运行,​​广告可以完全访问您的任何文件。

如果您因任何原因坚持使用JavaScript,它也有能力修改您的文件,但它仍然不是它的目的。您必须赋予它特殊权限,并且您将所有个人文件访问浏览器仍然很奇怪。但是在客户端这个Javascript代码id,即你不需要node.js,也不需要表达。客户端代码可以使用单个浏览器编写和运行。查看this article了解有关它的更多信息。

但是如果你仍然相信node是你的方式,那么你还有一些选择。首先,但我不认为这是你的答案:写一个上传网站,将mp3文件上传到你的服务器(仍然在同一台计算机上,但把它放在项目位置)。它应该工作并且看起来像一个真实的网站(就像node.js一样)。最后你要求的东西可以实现,但它真的很糟糕,你可以尝试从应用程序路径中引用它,如

var fs = require('fs'),
path = require('path'),    
filePath = path.join(__dirname, '../outerfile.mp3')
filePath2 = path.join('/var/outerfile.mp3');

然而,它可能依赖于平台,它将如何运行并且根本不可能正常工作。

我的最后建议:你应该考虑为你的项目使用另一种语言。