Image ExpressJS:从MongoDB检索图像并在Jade中显示

Image ExpressJS:从MongoDB检索图像并在Jade中显示,image,node.js,mongodb,pug,express,Image,Node.js,Mongodb,Pug,Express,我正在寻找从MongoDB检索图像并显示它们的好方法。例如,要检索配置文件图片并将其显示在配置文件页面上,我目前的做法如下: 个人资料页 路线 基本上,我呈现profile页面,img标记向服务器发送一个请求,从数据库中提取用户的图片。我正在MongoDB中将图像保存为BinData。不使用GridFS,因为我希望图片很小 有更好的方法吗??我试图使用res.render'users/show',{picture:data}将图像数据直接发送到jade视图,但是img标签不喜欢这样,我不清楚为什

我正在寻找从MongoDB检索图像并显示它们的好方法。例如,要检索配置文件图片并将其显示在配置文件页面上,我目前的做法如下:

个人资料页

路线

基本上,我呈现profile页面,img标记向服务器发送一个请求,从数据库中提取用户的图片。我正在MongoDB中将图像保存为BinData。不使用GridFS,因为我希望图片很小

有更好的方法吗??我试图使用res.render'users/show',{picture:data}将图像数据直接发送到jade视图,但是img标签不喜欢这样,我不清楚为什么。这是一条死胡同吗


如有任何意见/建议,将不胜感激。谢谢

如果

a您对图像数据进行了base64编码

b前缀为数据:

但我不建议您这样做,您基本上是在html中排列图像

相反,您应该创建一个单独的路径来处理您的图像/化身

例如,你的头像的图像源应该是

img(src='http://mydomain.com/avatars/user1.jpg')

当浏览器请求此图像时,您将使用从mongo检索的图像数据进行响应。

谢谢您的回答。我理解你对一张图片所说的话,但是如果我需要显示一整组图片和文本呢。我怎样才能把所有这些信息放到我的视图中呢?那么,你需要显示的任何文本旁边都会有大量的img标签。然后,这些标签中的每一个都会从图像/化身路径请求合适的图像。但是在页面呈现时,我不知道会有多少图像。例如,可能一个用户在数据库中存储了许多他的朋友的图片,我想在他的个人资料页面上显示这些图片……您首先需要查询数据库,以计算出给定使用的图片数量。因此,您可以生成适当数量的图像标记。最后,浏览器将请求这些图像,它们将显示在页面上。我认为您将图像/BinData与显示图像所需的初始标记混淆了。这就解释了为什么您在标题中提到了带有翡翠的显示图像。
exports.avatars = (req, res) ->
  users.find req.session.user, (err, user) ->
    if user
      res.writeHead('200', {'Content-Type': 'image/png'})
      res.end(user.avatar.data, 'binary')
    else
      res.locals.flash = err
      res.render('index', {title: 'Home'})
img(src='http://mydomain.com/avatars/user1.jpg')