用户正在关注自己

问题描述 投票:0回答:1

我编写了一个用于关注和取消关注用户的函数,并在第一行代码中我做了 if 语句来做到这一点,这样用户就无法关注自己,但用户可以关注自己,即使这样

以下用户代码:

const followUnfollowUser = async(req, res) => {
    try {
        const { id } = req.params;
        const userToModify = await User.findById(id);
        const currentUser = await User.findById(req.user._id);

        if(userToModify === currentUser) {
            return res.status(400).json({ message: "You cannot follow/unfollow yourself!" });
        }

        if(!userToModify || !currentUser) return res.status(400).json({ message: "User not found!" });

        const isFollowing = currentUser.following.includes(id);

        if (isFollowing) {
            // unfollow user
            await User.findByIdAndUpdate(id, { $pull: { followers: req.user._id } });
            await User.findByIdAndUpdate(req.user._id, { $pull: { following: id } });
            res.status(200).json({ message: "User unfollowed successfully" });
        } else {
            // Follow User
            await User.findByIdAndUpdate(id, { $push: { followers: req.user._id } });
            await User.findByIdAndUpdate(req.user._id, { $push: { following: id } });
            res.status(200).json({ message: "User followed successfully" });
        }
    } catch (err) {
        res.status(500).json({ message: err.message });
        console.log("Error in follow or unfollow User: ", err.message);
    }
};

注意:我在路由器文件中使用 post 方法。这样可以吗?还是我应该使用(补丁或放置)来实现?

javascript node.js function mongoose logic
1个回答
0
投票

两个对象不会相同:

if(userToModify === currentUser) {

即使它们直观地表示相同的信息,它们也是不同的对象实例。

但是看看你如何获取这些对象:

const userToModify = await User.findById(id);
const currentUser = await User.findById(req.user._id);

如果这些标识符相同,那么您将获取同一记录的两个实例,对吧?然后只需比较标识符即可:

const { id } = req.params;

if(id === req.user._id) {
    return res.status(400).json({ message: "You cannot follow/unfollow yourself!" });
}

const userToModify = await User.findById(id);
const currentUser = await User.findById(req.user._id);
© www.soinside.com 2019 - 2024. All rights reserved.