【问题标题】:Displaying only the title on the client returns undefined仅在客户端显示标题返回 undefined
【发布时间】:2015-08-12 20:50:09
【问题描述】:

我在 mongoosejs 中定义了这样的模式:

var uploadSchema = mongoose.Schema({
    title            : String,
    happy            : String,
});

我希望我的数据库中的数据显示在客户端(我正在使用 ejs 进行模板):

app.get('/yay', function (req, res, next){
        Upload.find({}, function (err, course){
            res.render('./pages/yay.ejs', {course: course});
        });
    });

在客户端显示:

<div class="well">
    <p><%= course %></p>
</div> 

但这只是显示带有 id 的整个数据库,whatWillLearn。我只需要显示标题。我怎样才能做到这一点?我试过这个:

app.get('/yay', function (req, res, next){
            Upload.find({}, function (err, course){
                res.render('./pages/yay.ejs', {course: course.title});
            });
        });

但它只是在客户端返回 undefined。我该怎么办?

【问题讨论】:

  • 简单地说,您不能从 Mangoose 访问文档的单个字段?但是整个文档显示没有任何问题?
  • 是的,这正是问题所在。但是我该如何解决呢?
  • &lt;p&gt;&lt;%= happy.title %&gt;&lt;/p&gt; 工作吗?
  • 不,它没有。它返回未定义。
  • 您能复制粘贴您的数据样本吗?例如,当您尝试 res.render('./pages/yay.ejs', {happy: course})... 时可能会显示什么

标签: javascript mongodb express mongoose ejs


【解决方案1】:

看起来您正在返回一个数组,但未在传递给渲染的对象中设置正确的变量

试一试(这应该是数组中的第一道菜):

app.get('/yay', function (req, res, next){
  Upload.find({}, function (err, courses) {
    res.render('./pages/yay.ejs', { happy: courses[0].title });
  });
});

如果您没有课程,这将不起作用。您可能应该遍历所有返回的课程并将它们打印出来,或者将 Upload.find 更改为 Upload.findOne 以从数据库中获取 1

【讨论】:

  • 感谢这工作。不过我还有一个问题。如果我将 Upload.find 更改为 findOne,会发生什么。另外,我如何获得数组中的所有课程。
  • 如果您更改为Upload.findOne,则无需执行courses[0].title,您可以将其更改为courses.title,因为Upload.findOne 从数据库返回单个元素而不是数组。要打印您需要更新模板以循环遍历结果&lt;div class="well"&gt; &lt;% for(var i=0; i&lt;courses.length; i++) { %&gt; &lt;p&gt;&lt;%= courses[i].title %&gt;&lt;/p&gt; &lt;% } %&gt; &lt;/div&gt; 所需的所有内容
  • 它再次给了我未定义。
猜你喜欢
  • 2016-07-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-18
  • 2020-09-13
  • 2017-06-25
  • 2021-07-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多