Express/MongoDB/EJS - 无法读取对象

Express/MongoDB/EJS - Can't read object

所以我的 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)undefined 并且 console.log(fres._id) 工作正常。

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

Array.filter returns 一个数组。因此,var fres = result.filter(d => d._id == urlID); 变量 fres 是一个包含对象的数组。

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

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

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

此处讨论此问题:。您可以使用测试代码查看我的答案,以演示一些从 Mongoose 响应访问数据的方法。