如何使用节点js在浏览器中显示来自MongoDB的多个图像

时间:2017-08-10 11:55:11

标签: node.js mongodb

我的MongoDB数据库中存储了多张照片(图像),其中包含以下架构:

schema = new Schema( {
   name : String,
   photo : {data:Buffer, contentType: String}
});

现在,让我们假设我按照上面的模式将数百张照片存储在数据库中,每张照片都存储为文档。

我希望通过触发帖子API在浏览器中查看所有这些存储的图片,每个页面显示10张照片。应该有一个“上一个”或“下一个”按钮,它可以帮助我分别转到上一页或下一页。

我尝试过以下代码,当forEach循环迭代结束时,代码始终显示结果集中的最后一张照片。

app.post('/show', function(req, res) {
   var ph;
   //model is a mongodb model object for the schema
   model.find({}, function(err, result) {
   result.forEach(function(pic) {
   ph = pic['photo']['data'];
   })

  res.writeHead(200, {'Content-Type': 'image/jpeg' } );
  res.end(ph, 'binary');
});
}

有关如何编写html以在浏览器上动态显示从数据库中获取的图片的任何帮助都会有很大的帮助。

感谢。

2 个答案:

答案 0 :(得分:1)

而不是forEach使用地图

ph = result.map(pic => pic['photo']['data']);

这将为您提供ph数组中的100张照片。您可能希望一次只获得10张照片,在这种情况下,请查看this

答案 1 :(得分:0)

您可以像这样将包含数据库中所有条目的数组推送到HTML:

var ph;

app.get('/show',(req,res)=>{


model.find({}, async (err,cb)=>{ 
    if(!err){
        ph = await cb;

    }else{
        throw err;
    }

res.render('your_ejs_file_here.ejs',{ph: ph});

});