在 ejs 页面上显示猫鼬对象

Posted

技术标签:

【中文标题】在 ejs 页面上显示猫鼬对象【英文标题】:Displaying mongoose objects on ejs page 【发布时间】:2016-07-14 11:30:03 【问题描述】:

我正在使用 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 时,它显示“照片未定义”。

这是我第一次尝试将 mongoose 对象直接提取到 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);

);

谢谢!

【问题讨论】:

【参考方案1】:

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

【讨论】:

谢谢!如此简单,但我自己可能不会弄明白。

以上是关于在 ejs 页面上显示猫鼬对象的主要内容,如果未能解决你的问题,请参考以下文章

在 EJS 页面上从 mongoDB 访问数据

如何将日期格式从对象的猫鼬数组更改为 ejs 视图上的字符串?

基于下拉选择在客户端使用 EJS 过滤猫鼬数据

如何使用猫鼬和EJS实现分页并在分页时保留搜索查询?

如何将数据从猫鼬模型显示/渲染到 ejs 文件

使用 Node JS 在猫鼬中存储多个文本的理想方法?