Rozgryzłem to (dzięki Timothy!). Problemem było moje zrozumienie wszystkich tych technologii i tego, jak one do siebie pasują. Dla wszystkich, którzy są zainteresowani wyświetlaniem obrazów z MongoDB GridFS za pomocą Node, Express i Jade ...
Mój dokument w MongoDB ma odniesienie do obrazu przechowywanego w GridFS, który jest identyfikatorem ObjectId przechowywanym jako ciąg. np. MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- Uwaga:ciąg reprezentujący ObjectId. Powodem, dla którego zapisałem go jako ciąg, było to, że przechowywanie ObjectId sprawiało mi kłopot w Routingu, ponieważ renderował się jako binarny i nie mogłem wymyślić, jak to naprawić. (Może ktoś może tu pomóc?). W każdym razie rozwiązanie, które mam, jest poniżej:
Repozytorium plików - Pobierz obraz z GridFS, przekazuję String Id, który następnie konwertuję na BSON ObjectId (możesz również pobrać plik według nazwy pliku):
FileRepository.prototype.getFile = function(callback,id) {
var gs = new GridStore(this.db,new ObjectID(id), 'r');
gs.open(function(err,gs){
gs.read(callback);
});
};
Szablon Jade - Renderuj znaczniki HTML:
img(src='/data/#{myentity.ImageId}')
Plik App.JS - Routing (za pomocą Express) Ustawiam trasę „/data/:imgtag” dla obrazów dynamicznych:
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 );
});
I to zrobiło robotę. Wszelkie pytania daj mi znać :)