Jeg fandt ud af dette (tak Timothy!). Problemet var min forståelse af alle disse teknologier, og hvordan de passer sammen. For alle andre, der er interesseret i at vise billeder fra MongoDB GridFS ved hjælp af Node, Express og Jade ...
Mit dokument i MongoDB har en reference til billedet, der er gemt i GridFS, som er et ObjectId gemt som en streng. for eksempel. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- NB:Strengrepræsentation af ObjectId. Grunden til, at jeg gemte det som en streng, var, at lagring af ObjectId gav mig en smerte i Routing, da den blev gengivet som binær, og jeg kunne ikke finde ud af, hvordan jeg fikser dette. (Måske nogen kan hjælpe her?). I hvert fald er den løsning, jeg har, nedenfor:
FileRepository - Hent billedet fra GridFS, jeg sender et String Id ind, som jeg så konverterer til et BSON ObjectId (du kan også få filen efter filnavn):
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-skabelon - Gengiv HTML-markeringen:
img(src='/data/#{myentity.ImageId}')
App.JS-fil - Routing (ved hjælp af Express) Jeg opsætter '/data/:imgtag'-ruten for dynamiske billeder:
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 );
});
Og det gjorde arbejdet. Eventuelle spørgsmål lad mig vide :)