【问题标题】:Delete method not working in MongoDB. Whenever I delete a voucher I get a CastError删除方法在 MongoDB 中不起作用。每当我删除凭证时,我都会收到 CastError
【发布时间】:2019-07-25 17:22:23
【问题描述】:

错误信息:"message": "Cast to ObjectId failed for value \"{ [Function: ObjectID]\n

我尝试将 id 变量类型转换为 ObjectId。

凭证控制器:

    module.exports.deleteVoucher = function(req, res, next) {

    var lectionId = req.params._id;
    var lectionId = require('mongodb').ObjectID;
    if (!lectionId || lectionId === "") {
    return res.json({ "success": false, "msg": "You need to send the ID of 
    the Offer", "error": err });
    }

    Voucher.findByIdAndRemove(lectionId, function (err, removed) {
    if (err) {
      return res.json({ "success": false, "msg": "Error while deleting 
    Offer", "error": err });
    }

    res.status(200).json({ "success": true, "msg": "Offer deleted" });
    });

    };

我该如何解决这个 objectId 问题?

这是我使用的模型:

这是 index.js 中的路由:

router.delete('/voucher/delete/:_id', voucherCtrl.deleteVoucher);

当我向 ObjectId 添加类型转换时,我收到错误 500, 内部服务器错误。

【问题讨论】:

  • 问题解决了吗?

标签: node.js database mongodb postman mongoose-schema


【解决方案1】:

将字符串转换为 mongoose 对象 id

module.exports.deleteVoucher = function(req, res, next) {

var lectionId = req.params._id;


if (!lectionId || lectionId === "") {
   return res.json({ "success": false, "msg": "You need to send the ID of the Offer", "error": err });
}

let lectionObjectId = mongoose.mongo.ObjectId(lectionId);
// or  lectionObjectId= mongoose.Types.ObjectId(lectionId)    

Voucher.remove({"_id":lectionObjectId}, function (err, removed) {
   if (err){
    return res.json({ "success": false, "msg": "Error while deleting Offer", "error": err });
   }

   res.status(200).json({ "success": true, "msg": "Offer deleted" });
});

};

【讨论】:

  • 当我这样做时,我得到错误 500 内部服务器错误。有什么办法可以避免这个错误?
  • 这是错误{ "err": {}, "msg": "500 Internal Server Error", "data": null }
  • 是的,这里是凭证控制器的完整代码:ideone.com/Bjn73n,这是路由:router.get('/voucher/get',voucherCtrl.getVouchers); router.post('/voucher/post',voucherCtrl.postVoucher); router.delete('/voucher/delete/:_id',voucherCtrl.deleteVoucher);
  • 如果发生错误,在您的删除功能中打印此return res.json({ "success": false, "msg": "Error while deleting Offer", "error": err });... 并且您收到的错误是{ "err": {}, "msg": "500 Internal Server Error", "data": null } .... 此错误来自何处,您需要找出跨度>
  • 您收到的错误与删除失败时的错误打印不同
猜你喜欢
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2020-03-29
  • 1970-01-01
相关资源
最近更新 更多