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

Express/MongoDB/EJS项目中如何获取好友请求接收方的_id

解决好友请求接收方ID获取问题

核心问题在于你当前的用户路由只传递了登录用户的信息,没有获取并传递**页面所属用户(即好友请求接收方)**的ID。以下是具体修复步骤:

1. 修改用户路由,获取接收方用户信息

在/users/:user路由中,根据URL里的用户名查询数据库,拿到接收方的完整用户对象,然后传递给模板:

router.get("/:user", async function (req, res, next) {
  try {
    // 获取URL中的目标用户名
    const targetUsername = req.params.user;
    // 查询目标用户的信息
    const profileUser = await User.findOne({ username: targetUsername });
    
    if (!profileUser) {
      return res.status(404).send("用户不存在");
    }

    // 获取登录用户信息
    const currentUser = req.user;
    // 查询状态列表(保持原有逻辑)
    const list_status = await Status.find({}, "content author createdAt").sort({ title: 1 });

    res.render("profile", {
      status_list: list_status,
      currentUser: currentUser, // 登录用户
      profileUser: profileUser  // 页面所属用户(接收方)
    });
  } catch (err) {
    return next(err);
  }
});

2. 更新EJS表单,填充接收方ID

将表单中receiver的value替换为接收方用户的ID,使用模板变量profileUser._id:

<form action="/friend-requests" method="POST">
  <input type="hidden" name="receiver" value="<%= profileUser._id %>" />
  <input type="hidden" name="sender" value="<%= currentUser._id %>" />
  <button type="submit">Send Friend Request</button>
</form>

3. 补充注意事项

  • 确保FriendRequest模型的schema正确关联了User的ObjectId:
    const friendRequestSchema = new mongoose.Schema({
      sender: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
      receiver: { type: mongoose.Schema.Types.ObjectId, ref: "User" },
      status: { type: String, enum: ["pending", "accepted", "rejected"], default: "pending" },
      createdAt: { type: Date, default: Date.now }
    });
    
  • 可以在表单渲染时判断:如果当前用户是页面所属用户,就隐藏“发送好友请求”按钮,避免自己加自己。

这样修改后,POST路由中req.body.receiver就能正确获取到接收方的ID,好友请求就能正常保存了。

内容的提问来源于stack exchange,提问作者Dagger

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:37:07