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

Node.js 如何使用node js在浏览器中显示来自MongoDB的多个图像,node.js,mongodb,Node.js,Mongodb,我的MongoDB数据库中存储了多张照片(图像),其模式如下: schema = new Schema( { name : String, photo : {data:Buffer, contentType: String} }); 现在,让我们假设我在数据库中存储了上百张照片,每个照片存储为一个文档 我想通过启动post API,在浏览器中查看所有存储的图片,每个页面显示10张照片。应该有一个“上一页”或“下一页”按钮,它将帮助我分别进入上一页或下一页 我尝试了以下代码,它总是在

我的MongoDB数据库中存储了多张照片(图像),其模式如下:

schema = new Schema( {
   name : String,
   photo : {data:Buffer, contentType: String}
});
现在,让我们假设我在数据库中存储了上百张照片,每个照片存储为一个文档

我想通过启动post 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以在浏览器上动态显示从数据库中获取的图片的帮助都将非常有用


谢谢。

使用地图,而不是
forEach

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

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

您可以将包含数据库中所有条目的数组推送到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});

});

别那样做。而是创建一个API端点,通过提供的id值获取每个图像。然后简单地指向
中的端点,就像处理任何常规图像一样。这就是方法,让浏览器来缓存和处理图像请求。你需要HTML来显示多个图像。不能发送内容类型为图像的多个图像。这将是一个很好的开始,可以呈现一个可以从HTML页面调用的单个图像。@Neil Lunn如果我不知道数据库中有多少图像……那么我怎么知道有多少图像呢?从Mongo DB获取一定数量的照片这个答案很好。但是,我希望在客户端显示一个动态div列表,并带有一个next按钮。假设我将以数组或类似结构从数据库中获取所有项。我将首先显示10,然后单击下一步按钮,下一个10将显示在前面的显示中。如果你能提供一些提示或链接来通过NodeJS实现这一点,那会很有帮助。就像我上面所说的,你可以一次性提供所有数据作为一个数组,尽管当你有大量数据时,你可能不应该使用这样的东西。前端应该负责分页,而与后端(nodejs)无关。否则,您需要实现在prev链接中描述的分页,第一种方法很简单,只要您在数据库上维护适当的索引。您需要在请求中使用自定义标头。看看推特的。您可以返回数据或html块。