我想通了(谢谢蒂莫西!)。问题是我对所有这些技术的理解以及它们如何组合在一起。对于任何有兴趣使用Node,Express和Jade显示来自MongoDB GridFS的图像的人...
我在MongoDB中的文档中引用了存储在GridFS中的图像,该图像是存储为 字符串的ObjectId。例如MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} < - NB:ObjectId的字符串表示形式。我将它存储为字符串的原因是因为存储ObjectId在Routing中给我一个痛苦 ,因为它以二进制形式呈现,我无法弄清楚如何解决这个问题。 (也许有人可以帮忙吗?)。总之,该解决方案我有低于:
FileRepository文件 - 检索GridFS的形象,我传递一个字符串ID,然后我转换为 一个BSON的ObjectId(你也可以通过文件名的文件) :
FileRepository.prototype.getFile = function(callback,id) {
var gs = new GridStore(this.db,new ObjectID(id), 'r');
gs.open(function(err,gs){
gs.read(callback);
});
};
玉模板 - 渲染HTML标记:
img(src='/data/#{myentity.ImageId}')
个
App.JS文件 - 路由(使用快递)我设置了 '/数据/:imgtag' 路线的动态图像:
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);
});
,但这并工作。任何问题都让我知道:)
修复MIME类型或从网格中检测到它 – 2012-03-23 21:14:53
谢谢蒂莫西,这指出我在正确的方向。还有一个我需要解决的其他问题,所以我在下面发布我的解决方案以获得完整性。 – 2012-03-24 03:31:16