【问题标题】:Monggose/Angular/Node: route with deleteOne method keeps saying object is deleted but the deletecount is zeroMongoose/Angular/Node:使用 deleteOne 方法的路由一直说对象已删除,但删除计数为零
【发布时间】:2020-04-09 01:37:16
【问题描述】:

我已经看到其他有关此问题的帖子,但我无法根据我的问题调整他们的解决方案:我有一个使用猫鼬的小型 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)
}

电影组件.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>

删除后来自后端的消息:

获取对象方法的日志

【问题讨论】:

    标签: node.js angular mongoose mean-stack


    【解决方案1】:

    问题在于您的Model Route,特别是_id: req.params._id

    根据你的路线

    router.delete("/:id", (req, res, next) => { })
    

    您收到的是id 而不是_id

    所以你必须从_id: req.params.id 这样的参数中获取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,发现您正在通过 (click) 传递整个 movie 对象。但是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>
    

    【讨论】:

      猜你喜欢
      • 2020-08-05
      • 2021-12-20
      • 2012-01-20
      • 2021-10-07
      • 2018-11-13
      • 2013-09-18
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      相关资源
      最近更新 更多