2017-05-09 126 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

相關問題