我的代码:
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 创建路线,以便我可以将其用作 API,在我的 angular2 应用程序中用作提供程序。
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 在数据库中编写的歌曲。 gridFS API 链接 gridFS API Link
我想使用 ionic2 创建一个应用程序,其中包含一个搜索栏,当我输入歌曲名称时,它将显示歌曲并且我可以播放它。
我花了 1 周的时间在堆栈上写了 3 次,但无法得到答案。
最佳答案
我敢打赌您是服务器端 Web 开发的新手,因为您的问题有点忽略了创建 Node.js 应用程序的全部要点。
编写服务器时,目标是服务器无法访问客户端计算机上的文件。这意味着您的应用程序充当瘦客户端。不要混淆 Node.js 也在您的计算机上运行:它创建了自己的模拟服务器,该服务器充当真正的远程计算机,即使它与您使用的计算机位于同一台计算机上。因此,您无法修改项目库之外的文件,或者即使可以,这也将是一种黑客攻击,而且这不是 Node.js 的用途。
如果您想要一个专门修改计算机上文件的程序,您应该学习厚客户端编程语言,例如 C、C++ 或 Java。它们只能在您的计算机上运行,并且可以完全访问您的任何文件。
如果您出于某种原因坚持使用 JavaScript,它也有能力修改您的文件,但它仍然不是它的预期用途。您必须授予它特殊的权限,但您向浏览器授予对所有个人文件的访问权限仍然很奇怪。然而,这个Javascript代码id在客户端,即你不需要node.js,也不需要express。客户端代码可以使用单个浏览器编写和运行。查看this article了解更多相关信息。
但是如果您仍然确信 node
是您的方式,那么您仍然有一些选择。首先,但我不认为这是你的答案:编写一个上传网站,将 mp3 文件上传到你的服务器(仍在同一台计算机上,但将其放在项目位置)。它应该可以工作并且看起来像一个实际的网站(就像 Node.js 的用途一样)。最后你所要求的可以有点实现,但它确实很hacky,你可以尝试从应用程序路径中引用它,如
var fs = require('fs'),
path = require('path'),
filePath = path.join(__dirname, '../outerfile.mp3')
filePath2 = path.join('/var/outerfile.mp3');
但是,它的运行方式可能取决于平台,并且根本不可能工作。
我的最终建议:您应该考虑为您的项目使用另一种语言。
关于node.js - 如何从使用 gridFS 存储的 mongodb 读取 mp3 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43860406/