2017-05-09 90 views
1

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

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文件在数据库成功写入。 现在我的目标是创建使用快递的路线,以便我可以在我的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'); 
}); 
}); 

这里的某个地方在我的代码,我无法找到写在DB使用GridFS的歌曲。 gridFS的链接API gridFS API Link

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

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

+0

您可以将我重定向到GitHub仓库或某个地方下载您的整个代码并尝试调试吗? –

回答

0

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

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

如果您需要专门修改计算机上文件的程序,您应该学习像C,C++或Java这样的胖客户端编程语言。他们只能在您的电脑上运行,并且可以完全访问您的任何文件。

如果您无论出于何种原因都坚持使用JavaScript,那么它也有权修改您的文件,但它仍然不是它的目的。您必须授予它特殊的权限,并且您可以将所有个人文件授予您的浏览器,这仍然很奇怪。然而,这个JavaScript代码在客户端,即你不需要node.js,也不表示。客户端代码可以用一个浏览器编写和运行。查看this article了解更多信息。

但是,如果你仍然相信node是你的方式,那么你仍然有一些选择。首先,我不认为这是你的答案:写一个上传网站,将mp3文件上传到你的服务器(仍然在同一台计算机上,但将它放在项目位置)。它应该工作,看起来像一个实际的网站(如node.js是什么)。最后你要问了,可以还挺实现,但它是reaaaaally哈克,你可以尝试,只是引用它从应用程序的路径类似

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

但是它可能是依赖于平台将如何运行,不太可能一直在工作。

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

+0

谢谢@丹尼尔格兰特,感谢您为我的帖子贡献宝贵的时间。尽管我是一名新手。我想向你解释我正在工作的全部内容,以便你能帮助我解决我面临的问题。我正在编辑我的问题。 – Aditya

+0

请看看更新后的问题,请让我知道如果你能帮我解决这个问题。 – Aditya

相关问题