NodeJS+EJS中匹配post.author与user._id并获取对应username
解决EJS模板中匹配文章作者ID与用户名的问题
嘿,我来帮你搞定这个需求!你现在已经拿到了post(带作者ID)和users数组,有两种简单的方法可以实现匹配并显示作者用户名:
方法一:在EJS模板中直接查找匹配(无需修改控制器)
因为post.author是MongoDB的ObjectId类型,而user._id也是ObjectId,直接比较可能会有类型问题,所以我们需要转成字符串再匹配。用数组的find方法就能快速找到对应的用户:
<% // 从users数组中找到与post.author匹配的用户 const postAuthor = users.find(user => user._id.toString() === post.author.toString()); // 显示用户名,找不到的话显示默认文本 %> <%= postAuthor ? postAuthor.username : '未知作者' %>
方法二:在控制器中提前关联作者信息(更推荐)
其实你可以在查询post的时候,直接把author字段也关联上(就像你处理reviews的作者那样),这样模板里就能直接用,不用再手动匹配,效率也更高:
修改你的postShow函数:
async postShow(req, res, next) { let post = await Post.findById(req.params.id) .populate({ path: 'reviews', options: { sort: { '_id': -1 } }, populate: { path: 'author', model: 'User' } }) .populate('author'); // 新增这行,关联文章的作者信息 let users = await User.find().exec(); res.render('posts/show', { post, users }); }
之后在EJS里直接写:
<%= post.author.username %>
这样就搞定啦,这种方法更符合Mongoose的关联设计,也让模板代码更简洁。
内容的提问来源于stack exchange,提问作者Or05230
相关产品推荐
相关产品推荐

