我已经看到其他与此发行版有关的帖子,但是我无法根据他们的问题调整他们的解决方案:我有一个使用mongoose的小型MEAN应用。当我尝试删除存储在集合中的用户或其他对象时,会发生此问题。路由正常,我没有错误,但是对象没有被删除,我也不明白。我一遍又一遍地重新安装了猫鼬,尝试了其他方法,例如findByIdAndDelete
,但是什么也没有...有人可以帮助解决此问题吗?这里是相关代码:
模型文件:
const mongoose = require('mongoose');
const movieSchema = mongoose.Schema({
name: {
type: String,
index:true,
required: true
},
rate: {
type: String,
required: true
}
});
module.exports = mongoose.model('Movie', movieSchema);
模型路线:
router.delete("/:id", (req, res, next) => {
Movie.deleteOne({
_id: req.params._id
}).then(result => {
res.status(200).json({
message: "Movie deleted!",
movie:result
});
});
});
电影服务(角度)
deleteMovie(id:any){
return this.http.delete(baseUrl + 'movie/' + id)
}
电影component.ts
deleteMovie(id){
this.movieService.deleteMovie(id).subscribe(data=>{
console.log(data)
this.movieService.getStoredMovies();
})
}
HTML:
<ul *ngFor="let movie of storedMovies | unique; let i=index">
<li *ngIf="i<=10 " (click)="deleteMovie(movie)">
{{movie.name}}
</li>
</ul>
删除后来自后端的消息:
获取对象方法的日志
问题在您的Model Route
中,特别是在_id: req.params._id
中。
根据您的路线
router.delete("/:id", (req, res, next) => { })
您收到的是id
而不是_id
所以您必须从类似id
的参数中获取_id: req.params.id
。
您的最终结果将是这样
router.delete("/:id", (req, res, next) => {
Movie.deleteOne({
_id: req.params.id
}).then(result => {
res.status(200).json({
message: "Movie deleted!",
movie:result
});
});
});
更新
我还查看了您的HTML
,发现您正在movie
上传递整个(click)
对象。但是deleteMovie(id)
只需要id
,因此您必须像这样更新HTML
<ul *ngFor="let movie of storedMovies | unique; let i=index">
<li *ngIf="i<=10 " (click)="deleteMovie(movie._id)">
{{movie.name}}
</li>
</ul>