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
相关产品推荐
相关产品推荐

