Node.js CastError:value“的转换为ObjectId失败”;0“;在路径上“;“追随者”;
我在NodeJS服务器上使用Mongoose。我创建了一个正常工作的跟随路线Node.js CastError:value“的转换为ObjectId失败”;0“;在路径上“;“追随者”;,node.js,express,mongoose,Node.js,Express,Mongoose,我在NodeJS服务器上使用Mongoose。我创建了一个正常工作的跟随路线 router.post("/follow/:id/:followerId", async (req, res) => { const user = await User.findById(req.params.id); const follower = await User.findById(req.params.followerId); try { await User
router.post("/follow/:id/:followerId", async (req, res) => {
const user = await User.findById(req.params.id);
const follower = await User.findById(req.params.followerId);
try {
await User.findByIdAndUpdate(user, {
$push: { followers: follower },
}).then(
await User.findByIdAndUpdate(follower, {
$push: { followings: user },
})
);
res.send("Done");
} catch (error) {
console.log(error);
}
});
现在,我为unfollow route创建了反面。但我得到了以下错误:CastError:Cast to ObjectId在路径“followers”处的值“0”失败
原因:错误:传入的参数必须是12字节的单个字符串或24个十六进制字符的字符串
以下是我的展开路线:
router.post("/unfollow/:id/:followerId", async (req, res) => {
const user = await User.findById(req.params.id);
const follower = await User.findById(req.params.followerId);
try {
await User.findByIdAndUpdate(user, {
$pull: { followers: follower },
}).then(
await User.findByIdAndUpdate(follower, {
$pull: { followings: user },
})
);
res.send("Done");
} catch (error) {
console.log(error);
}
});
我怎样才能使它工作呢
这是我的模式:
const userSchema = new Schema({
username: {
type: String,
required: true,
},
fullName: {
type: String,
required: true,
},
followers: [
{
type: Schema.Types.ObjectId,
ref: "User",
},
],
followings: [
{
type: Schema.Types.ObjectId,
ref: "User",
},
],
active: {
type: Boolean,
default: true,
},
});
请帮助架构与添加新跟随者/追随者的方式不匹配。 在模式中,follower和follower是ObjectId的数组
followers: [
{
type: Schema.Types.ObjectId,
ref: "User",
},
],
followings: [
{
type: Schema.Types.ObjectId,
ref: "User",
},
],
但是,在阵列中添加新的跟随者和跟随者时,将使用整个对象
const user = await User.findById(req.params.id); // user object
const follower = await User.findById(req.params.followerId);
try {
await User.findByIdAndUpdate(user, {
$push: { followers: follower }, // you use the user object instead of the id
}).then(
await User.findByIdAndUpdate(follower, {
$push: { followings: user },
})
);
我认为我们应该更改对象的id:
const user = await User.findById(req.params.id);
const follower = await User.findById(req.params.followerId);
try {
await User.findByIdAndUpdate(user, {
$push: { followers: follower._id }, // here we use the id of follower
}).then(
await User.findByIdAndUpdate(follower, {
$push: { followings: user._id },
})
);
当我们移除从动件和以下部件时也是如此:
try {
await User.findByIdAndUpdate(user, {
$pull: { followers: follower._id },
}).then(
await User.findByIdAndUpdate(follower, {
$pull: { followings: user._id },
})
);
注意:您可能需要在数据库中检查followers和followers数组中的内容,如果它们是对象(我认为),您应该更改为id。尝试
$pull:{followers:req.params.followerId}
它不会再次给出错误,但不会从数组中提取id。它们仍然存在@库恩格朗戈克