所以我已经阅读并尝试为此实现其他解决方案。我只是想深入了解为什么它对我不起作用。这是我的第一个后端工作项目。我正在学习一门课程,但想自己尝试一些东西来坚持这些概念。
这是我的架构
//ANIMAL
var animalSchema = new mongoose.Schema({
image: String,
name: String,
variety: String,
DOB: Date,
logs: [{
amount: Number,
notes: String,
dateMilked: Date
}],
created: { type: Date, default: Date.now }
});
到目前为止,我已经设法让动物和日志的所有 RESTful 路由正常工作,除了删除日志。
这就是我所拥有的,但它不会删除任何内容 - 它也不会抛出任何错误。
app.delete("/animals/:id/logs/:id", function(req, res) {
Animal.findOneAndUpdate({ 'logs._id': req.params.id }, {
$pull: {
"logs": { "_id": req.body.id }
}
}, { safe: true, multi: true },
function(err, foundAnimal) {
if (err) {
console.log(err);
res.redirect("/");
}
else {
res.redirect("/animals/" + foundAnimal._id + "/logs");
}
});
});
任何帮助或见解都会很棒!!我想学习!
问题是 req.body.id 可能没有任何值,因为您在路径中发送了两个 ID。如果你称它们为相同的app.delete("/animals/:id/logs/:id",我很确定 req.params.id 将有两个值之一,但你将无法获得另一个。
您应该用不同的名称来称呼它们,如下所示:
app.delete("/animals/:animalId/logs/:logId",
然后,您可以访问这两个变量而不会发生任何冲突:
req.params.animalId
req.params.logId
希望对你有帮助