2016-03-26 22 views
0

Bir uygulama oluşturmak için Node/Express ve Mongoose kullanıyorum. Temelde sadece bir görüntü nesnesi olan veritabanımda 'Fotoğraf' nesneleri (aşağıda gösterilen şema) oluşturuyorum.ejs sayfasında mongoose nesnelerini görüntüleme

var PhotoSchema = new mongoose.Schema({ 
    image: { data: Buffer, contentType: String }, 
    name: String 
}); 

başarıyla yükleyebilir ve fotoğraf nesneler oluşturmak ve şimdi ben her fotoğraf nesnesi ayıklamak ve bir resim olarak oluşturması için istediğiniz yere bir/images görüntülemek oluşturma yapabilirsiniz. Görüşlerim için ejs kullanıyorum. Benim images.ejs dosyası için aşağıdaki ile gelip hav Bazı googling yaptıktan sonra:

<% photos.forEach(function(photo){ %> 
    <img src="/img/<%=photo._id%>" > 
<% }) %> 

Ben "Fotoğraf tanımlı değil" diyor/Resimlerinizi yüklediğinizde.

Bu ilk kez bir ejs sayfasına mongoose nesnelerini çıkarmayı denediğim ilk şeydir - yapmam gereken başka bir şey var mı/içerdiğimi, böylece işlevimin benim veritabanımdaki fotoğraf nesnelerine atıfta bulunduğunu anlayabiliyorum?

şunlarla yolları vardır:

router.get('/img', function (req, res, next) { 
try { 
    Photo.findOne({}, function (err, doc) { 
     if (err) 
      res.send(err); 
     if (doc) { 
      res.contentType(doc.image.contentType); 
      res.send(doc.image.data); 
     } 
    }); 
} 
catch (e) { 
    res.send(e); 
} 
}); 

router.get('/img/:id', function (req, res) { 
try { 
    Photo.findOne({ _id: req.params.id }, function (err, doc) { 
     if (err) 
      res.send(err); 
     res.setHeader('Cache-Control', 'public, max-age=3000000'); 
     res.contentType(doc.image.contentType); 
     res.send(doc.image.data); 
    }); 
} 
catch (e) { 
    res.send(e); 
} 
}); 

router.get('/images', function (req, res) { 
try { 
    Photo.find({}, function (err, doc) { 
     if (err) 
      res.send(err); 
     res.render('images', { images: doc }); 
    }); 
} 
catch (e) { 
    res.send(e); 
} 
}); 

teşekkür ederiz!

cevap

1

Görünüm değişkeniniz images (res.render('images', { images: doc });), photos değil. Birini veya diğerini yeniden adlandırın ve çalışması gerekir.

+0

Teşekkür ederiz! Çok basit ama muhtemelen kendi başıma düşünmezdim. – HarrytheCat