MongoDB: User validation failed: password: Path ' password '



我正在使用MERN Stack和Redux与Redux工具包制作一个社交媒体应用程序。

我做了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(前端)

如果我得到它是正确的,那么密码字段在你的猫鼬集合被标记为必需的。

当你使用下面的查询获取用户时,它将返回不可变的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();