Creé la base de datos y escribí el archivo mp3 en la base de datos. Ahora creé un servidor y usé el enrutador usando express. Pero no puedo ver la respuesta. Se muestra a continuación.
Mi código es el siguiente:
server.js
var express = require('express'); var app = express(); var mongoose = require('mongoose'); var morgan = require('morgan'); var bodyParser = require('body-Parser'); var methodOverride = require('method-override'); var cors = require('cors'); mongoose.connect('mongodb://localhost/aHolyBoly'); app.use(morgan('dev')); app.use(bodyParser.urlencoded({ 'extended': 'true' })); app.use(bodyParser.json()); app.use(bodyParser.json({ type: 'application/vnd.api+json' })); app.use(methodOverride()); app.use(cors()); app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); //res.header('Access-Control-Allow-Methods', 'DELETE, PUT'); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); var Songs = mongoose.model('Songs', { title: String }); app.get('/api/songs', function (req, res) { console.log("fetching songs..."); Songs.find(function (err, songs) { if (err) res.send(err) res.json(songs); //console.log('Songs',+JSON.stringify(Songs)); }); }); app.listen(8080); console.log("App listening on port 8080");¿Cómo puedo ver la respuesta en el archivo console.ie my songs.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'); }); });Puntos: 1.) He almacenado el archivo mp3 en la base de datos usando gridFs-stream.
2.) Ahora quiero crear una API para poder alojar mi servidor en ella y mi interfaz usa esos datos con la ayuda de la API.
3.) La interfaz solo obtendrá los datos, es decir, el archivo mp3.
Lo que debe entender es que cuando usa GridFS de mongo, creará dos colecciones, a saber, fs.files y fs.chuncks, y cualquier otro modelo que haya creado no tiene su archivo, sino que lo que puede hacer es vincular esos archivos en su modelo. Si está dispuesto (puede ser por ahora) a recibir solo un archivo que haya almacenado con el nombre de archivo canción1.mp3, el código indicado a continuación funcionará para usted. ¡Espero que esto ayude!
var express = require('express'); var app = express(); var mongoose = require('mongoose'); var morgan = require('morgan'); var bodyParser = require('body-Parser'); var methodOverride = require('method-override'); var cors = require('cors'); mongoose.Promise = global.Promise var conn = mongoose.createConnection('mongodb://localhost/aHolyBoly'); var Grid = require('gridfs-stream'); Grid.mongo=mongoose.mongo; let gfs; conn.once('open', function () { gfs = Grid(conn.db); }); app.use(morgan('dev')); app.use(bodyParser.urlencoded({ 'extended': 'true' })); app.use(bodyParser.json()); app.use(bodyParser.json({ type: 'application/vnd.api+json' })); app.use(methodOverride()); app.use(cors()); app.use(function (req, res, next) { res.header("Access-Control-Allow-Origin", "*"); //res.header('Access-Control-Allow-Methods', 'DELETE, PUT'); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); //song model should not be created like this //var Songs = mongoose.model('Songs', { // title: String //}); app.get('/api/songs', function (req, res) { console.log("fetching songs..."); //read from mongodb var readstream = gfs.createReadStream({ filename: 'song1.mp3' }); // set response header res.writeHead(200, { 'Content-Type': 'audio/mpeg', }); readstream.pipe(res); }); app.listen(8080); console.log("App listening on port 8080");Para aclarar cómo se puede vincular un archivo a un modelo, proporcioné un código a continuación:
var mongoose = require('mongoose') var Schema = mongoose.Schema const UserFile = new Schema({ username: { type: String, unique: true} file: { type: String } }) // create the model to export var UserFileModel = mongoose.model('UserFile', UserFile) module.exports = schemaModelSupongamos que ha almacenado un archivo para un usuario. Y almacenó ese nombre de archivo en el campo de archivo de UserFileModel con el nombre de usuario correspondiente. Luego, puede obtener fácilmente el archivo del usuario correspondiente en la siguiente ruta como se muestra a continuación:
var UserFileModel = require('path-to-UserFileModel'); router.get('/api/user/file/:username', function (req, res) { UserFileModel.findOne({username: req.params.username}, function(err, doc){ //read from mongodb var readstream = gfs.createReadStream({ filename: doc.file }); // set response header res.writeHead(200, { 'Content-Type': 'audio/mpeg', }); readstream.pipe(res); }) });