使用meanstack从mongoDb中删除时未定义ObjectId

时间:2018-01-17 07:56:42

标签: mongodb angular express mean-stack

我试图通过使用带有ANgular 4的MEAN STACK来删除MOngoDb中的条目。(此技术的新功能)

打字稿:

deleteitem(id){
  let deleteresult;
  let itemid = id;
  this.dataService.deleteitem(itemid)
  .subscribe(res =>deleteresult =res,
  err => this.apiError = err,
  )
};

的DataService:

deleteitem(itemid): Observable<any>{
      let data =new URLSearchParams();
      data.set('deleteId', itemid);
      console.log(data.toString());
      return this.http.post(URL, data.toString())
      .map(res=> res.json())
      .catch((error:any) => Observable.throw('Server Error To delete the item'));
       }

Router.js

const ObjectID = require('mongodb').ObjectID; 
 router.post('/deleteitem', function(req, res){
      MongoClient.connect('URL',function(err, client){
      if (err) throw err;
      var myDB = client.db('DbName');
       var collection = myDB.collection('collectionName');
       console.log(req.body);       
       //var objectId = collection.getObjectId();
       collection.remove({_id: ObjectId(req.body.deleteId), function(err, result)
      {
        res.send((result==1)?{msg:deleted} : {msg:"error:"+ err});
      }});
    })
    })

错误:

  

未定义ObjectId。

console.log(req.body)也给出了“{}”值。不知道为什么。 但是console.log(data.toString());在dataservice中,提供要从MongoDb中删除的目标_id的值。

1 个答案:

答案 0 :(得分:1)

尝试在

中使用data代替data.toString()
return this.http.post(URL, data.toString())

这将在console.log(req.body);

中提供输出值

另外,请尝试替换以下代码行

collection.remove({_id: ObjectId(req.body.deleteId), function(err, result)

collection.deleteOne({_id: new mongodb.ObjectID(req.body.deleteId)}, function(err, result)

您需要在此处创建mongodb的新实例。 希望这有效。