我想通了(感谢蒂莫西!)。问题在于我对所有这些技术以及它们如何组合在一起的理解。对于任何有兴趣使用 Node、Express 和 Jade 显示来自 MongoDB GridFS 的图像的人...
我在 MongoDB 中的文档引用了存储在 GridFS 中的图像,这是一个存储为字符串的 ObjectId。例如 MyEntity {ImageId:'4f6d39ab519b481eb4a5cf52'} <-- 注意:ObjectId 的字符串表示形式。我将它存储为字符串的原因是因为存储 ObjectId 让我在路由中感到痛苦,因为它呈现为二进制,我不知道如何解决这个问题。(也许有人可以在这里提供帮助?)。无论如何,我的解决方案如下:
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);
});
};
Jade 模板- 渲染 HTML 标记:
img(src='/data/#{myentity.ImageId}')
App.JS 文件- 路由(使用 Express) 我为动态图像设置了“/data/: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 );
});
这就是工作。任何问题让我知道:)