问题描述
所以我的 Mongo 数据库中有一些数据,我.find()
通过快递将其发送到我的 EJS 视图。很简单。但问题是当我尝试使用 <pre><%=%></pre>
阅读它时,我得到了未定义。这是整个代码:
MongoDB 中包含对象的数据数组:
[{
_id: 6069820f402d01120cda8cff,imageName: 'Dining Plate',imagePath: './public/assets/img/6.jpg',description: 'Wallpapers',__v: 0
}]
我在那里获取并发送给 EJS 的 Express Code:
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.description
替换 fres._id
时,它工作得很好。但就是这样,它不想打印任何其他键值。我已经搜索了将近一天。但没有任何帮助。这让我很烦。
PS: console.log(fres.description)
是 undefined
,console.log(fres._id)
工作正常。
解决方法
Array.filter
返回一个数组。因此,var fres = result.filter(d => d._id == urlID);
变量 fres
是一个数组,其中包含一个对象。
如果您只需要 EJS 模板中的对象,则只需传递该对象。
res.render('wallpaper-page',{fres: fres[0]});
现在您可以直接访问 description
键。但我不明白 fres._id
是如何工作的,它也应该是 undefined
。
除了 filter 方法返回数组的问题之外,我认为您从 Mongoose 响应访问数据还有另一个问题。
这里讨论了这个问题:Mongoose return data inside _doc object。您可以使用测试代码查看我的回答,以演示一些从 Mongoose 响应中访问数据的方法。