MongoDB:用户验证失败:password:路径`password`是必需的

pjngdqdw  于 2023-04-05  发布在  Go
关注(0)|答案(1)|浏览(202)

我正在使用MERN Stack和Redux以及Redux Toolkit制作一个社交媒体应用程序。
我做了addRemoveFriend函数,检查用户是否已经是朋友,然后删除它,否则它会添加它,但它不工作,并给予我这个错误:

"User validation failed: password: Path `password` is required."

addRemoveFriend:

export const addRemoveFriend = async (req, res) => {
  try {
    const { id, friendId } = req.params;
    const user = await User.findById(id);
    const friend = await User.findById(friendId);

    if (user.friends.includes(friendId)) {
      user.friends = user.friends.filter((id) => id !== friendId);
      friend.friends = friend.friends.filter((id) => id !== id);
    } else {
      user.friends.push(friendId);
      friend.friends.push(id);
    }
    await user.save();
    await friend.save();

    const friends = await Promise.all(
      user.friends.map((id) => User.findById(id))
    );
    const formattedFriends = friends.map(
      ({ _id, firstName, lastName, username, avatarPath }) => {
        return { _id, firstName, lastName, username, avatarPath };
      }
    );

    res.status(200).json(formattedFriends);
  } catch (err) {
    res.status(404).json({ error: err.message });
  }
};

用户模型:

const UserSchema = new mongoose.Schema(
  {
    ...,
    password: {
      type: String,
      required: true,
      min: 8,
      max: 50,
    },
    friends: {
      type: Array,
      default: [],
    },
  },
  { timestamps: true }
);

AddRemoveFriend (Frontend)

luaexgnf

luaexgnf1#

如果我得到它的权利,然后在您的 Mongoose 收集密码字段标记为必需的。
当你用下面的查询获取用户时,它将返回不可变的mongoose文档。

const user = await User.findById(id);
const friend = await User.findById(friendId);

你得到这个错误的原因是上面的查询返回的结果将不是你所期望的普通JavaScript对象。
使用.lean()让mongoose返回一个可以修改的Javascript对象:

const user = await User.findById(id).lean();
const friend = await User.findById(friendId).lean();

相关问题