You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:10:39