【问题标题】:Express/MongoDB/EJS - Can't read objectExpress/MongoDB/EJS - 无法读取对象
【发布时间】:2021-04-04 09:29:09
【问题描述】:

所以我的 Mongo 数据库中有一些数据,我通过快递.find() 将其发送到我的 EJS 视图。很简单。但问题是当我尝试使用<pre><%=%></pre> 阅读它时,我得到了未定义。这是整个代码:
MongoDB中包含对象的数据数组:

[{
  _id: 6069820f402d01120cda8cff,
  imageName: 'Dining Plate',
  imagePath: './public/assets/img/6.jpg',
  description: 'Wallpapers',
  __v: 0
}]

我得到它并将其发送到 EJS 的表达代码:

app.get('/wallpapers/:id', ((req, res) => {
  const urlID = req.params.id;
  Thing.find({}, function (err, result) {
    if (err) {
      console.log(err);
    } else {
      var fres = result.filter(d => d._id == urlID);
      res.render('wallpaper-page',{fres});
    }
  });
})
)

和 EJS:

<pre><%= fres.description%> %> </pre>

现在大混乱:当我用 fres._id 替换 fres.description 时,它工作得非常好。但就是这样,它不想打印任何其他键值。我已经搜索了将近一天。但没有任何帮助。这让我很烦。

PS: console.log(fres.description)undefinedconsole.log(fres._id) 工作正常。

为什么?我该如何解决? 如果您需要任何其他代码,请告诉我。

【问题讨论】:

  • 如果你必须通过 id 搜索,为什么不直接使用Thing.findById(req.params.id)。你能告诉我console.log(fres)给了什么吗?
  • findbyid 仍然会给我这个对象。 console.log(fres) 也给了我对象。{ _id: 6069820f402d01120cda8cff, imageName: 'Dining Plate', imagePath: './public/assets/img/6.jpg', description: 'Wallpapers', __v: 0 }
  • 请看我的回答,如果有帮助请告诉我。 @lolman

标签: javascript node.js mongodb express ejs


【解决方案1】:

除了过滤器方法返回数组的问题之外,我认为您在从 Mongoose 响应中访问数据时还有另一个问题。

这里讨论了这个问题:Mongoose return data inside _doc object。您可以使用测试代码查看我的答案,以演示一些从 Mongoose 响应中访问数据的方法。

【讨论】:

  • 是的,这正是我自己发现的,并使用 .lean 和 .findOne 修复了它。我正要发到这里,结果发现了这个。
【解决方案2】:

Array.filter 返回一个数组。所以,var fres = result.filter(d =&gt; d._id == urlID); 变量fres 是一个包含对象的数组。

如果您只需要 EJS 模板中的对象,则只需传递该对象即可。 res.render('wallpaper-page',{fres: fres[0]});

现在您可以直接访问description 键。但是我不明白fres._id是怎么工作的,应该也是undefined

【讨论】:

  • 哦,对不起!我犯了一个愚蠢的错误,应该是{fres: fres[0]}@lolman 试试这个。
  • 我创建了另一个变量,其值为fres[0],并将其传递给视图。我仍然有未定义和 ._id 工作编辑:好的 Edit2:问题仍然存在 :(
  • 这是问题吗&lt;pre&gt;&lt;%= fres.description%&gt; %&gt; &lt;/pre&gt; 你关闭了两次。
  • 你在哪里记录fres?在filter 方法之后记录它。
猜你喜欢
  • 2022-12-12
  • 2021-05-24
  • 2018-12-26
  • 1970-01-01
  • 2019-10-28
  • 1970-01-01
  • 1970-01-01
  • 2018-10-04
  • 2017-08-21
相关资源
最近更新 更多