我正在使用Node / Express和mongoose来构建应用程序。我正在数据库中创建“照片”对象(如下所示的方案),它基本上只是一个图像对象。

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


我可以成功上传和创建照片对象,现在我要创建一个/ images视图,在其中要提取每个照片对象并将其渲染为图像。我正在使用ejs进行查看。进行一些谷歌搜索之后,我为我的images.ejs文件提出了以下内容:

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


当我加载/ images时,它说“未定义照片”。

这是我第一次尝试将猫鼬对象直接提取到ejs页面上-我还需要做/包含其他事情以便我的功能理解我是在引用数据库中的照片对象吗?

我也有以下路线:

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);
}
});


谢谢!

最佳答案

您的视图变量是imagesres.render('images', { images: doc });),而不是photos。重命名一个或另一个,它应该可以工作。

关于node.js - 在ejs页面上显示 Mongoose 对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36241450/

10-12 07:37
查看更多