sql >> Database >  >> NoSQL >> MongoDB

Render afbeelding opgeslagen in Mongo (GridFS) met Node + Jade + Express

Ik heb dit bedacht (bedankt Timothy!). Het probleem was mijn begrip van al deze technologieën en hoe ze in elkaar passen. Voor iedereen die geïnteresseerd is in het weergeven van afbeeldingen van MongoDB GridFS met Node, Express en Jade ...

Mijn document in MongoDB heeft een verwijzing naar de afbeelding die is opgeslagen in GridFS, een ObjectId die is opgeslagen als een tekenreeks. bijv. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- NB:Tekenreeksrepresentatie van ObjectId. De reden dat ik het als een string opsloeg, was omdat het opslaan van de ObjectId me een pijn in de Routing bezorgde omdat het als binair werd weergegeven en ik niet kon achterhalen hoe ik dit moest oplossen. (Misschien kan iemand hier helpen?). Hoe dan ook, de oplossing die ik heb staat hieronder:

FileRepository - Haal de afbeelding op uit GridFS, ik geef een String Id door, die ik vervolgens converteer naar een BSON ObjectId (je kunt het bestand ook op bestandsnaam krijgen):

FileRepository.prototype.getFile = function(callback,id) {
   var gs = new GridStore(this.db,new ObjectID(id), 'r');
   gs.open(function(err,gs){
      gs.read(callback);
   });
 };

Jade-sjabloon - Geef de HTML-opmaak weer:

img(src='/data/#{myentity.ImageId}')

App.JS-bestand - Routing (met Express) Ik stel de '/data/:imgtag' route in voor dynamische afbeeldingen:

app.get('/data/:imgtag', function(req, res) {
  fileRepository.getFile( function(error,data) {
     res.writeHead('200', {'Content-Type': 'image/png'});
     res.end(data,'binary');
  }, req.params.imgtag );
});

En dat deed zijn werk. Vragen laat het me weten :)



  1. MongoError:Onbekende modifier:$pushAll in node js

  2. C# MongoDB - Trek een item uit de array van een genest document op basis van een ID

  3. Lijst met dynamische attributen in een mongoïde model

  4. Mongoes groep en tellen