我正在使用Express/MongoDB克隆Facebook,并添加好友。我有它,所以当一个用户点击另一个用户页面上的按钮时,上面写着“
发送好友请求
“它向他们发送朋友请求,并存储在
FriendRequest
架构。
const friendRequestSchema = new mongoose.Schema({
sender: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
receiver: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
required: true,
},
status: {
type: String,
enum: ["pending", "accepted", "rejected"],
default: "pending",
},
createdAt: {
type: Date,
default: Date.now,
},
});
用户会收到通知,他们可以接受或拒绝请求。如果他们接受好友请求,状态将从
pending
到
accepted
。
这就是我的代码的来源。
我有一个
friends
ejs页面,我正在尝试绘制所有
已接受
用户分配的好友
好友请求
架构。我计划使用此页面显示所有用户朋友的列表。示例:
/:user/friends
。
router.get("/:user/friends", async function (req, res) {
const user = req.user.username;
const friends = await FriendRequest.find({
sender: req.user.id, // my issue
status: "accepted",
})
.populate("sender")
.populate("receiver")
.exec();
res.render("friends", { user, friends });
});
这是我的密码。问题出在它说的地方
sender: req.user.id
。当我有这样的功能时,它只显示我个人向其发送好友请求的好友列表,而不显示任何向我发送过好友请求的朋友。反之亦然。如果我改变
sender
到
receiver
它只会显示向我发送好友请求的好友。
下面是一个被接受的朋友的例子,当我使用
console.log
。每一个都被分配
发件人
或
接受者
。
_id: new ObjectId("6471d4a3a705acadf8af8923"),
sender: {
friends: [],
_id: new ObjectId("6454407483df47caef5004e2"),
username: 'Dagger',
createdAt: 2023-05-04T23:32:04.128Z,
__v: 0
},
当我把两者都放进去
发件人:req.user.id
和
receiver: req.user.id
在代码内部,什么都没有显示。我一直在想办法做到这一点,如果
发件人
OR
接受者
等于
req.user.id
它会显示朋友的用户名,但我很难找到方法,因为我不能使用
||
内部
find
方法
我希望我的代码看起来像这样
const friends = await FriendRequest.find({
sender || receiver: req.user.id,
status: "accepted",
})
但在某种程度上不会给我带来错误。