【问题标题】:cart.save() is not a function for updating a documentcart.save() 不是更新文档的函数
【发布时间】:2021-10-13 19:39:17
【问题描述】:

我正在创建一个电子商务应用程序,我目前正在使用 mongoDb 和 nodejs 中的编码处理购物车。我已经尝试了很多,但 cart.save() 不是一个函数错误正在引发。下面是我的 cartModel.js 从“猫鼬”导入猫鼬 常量 cartSchema = mongoose.Schema( { 用户:{ 类型:mongoose.Schema.Types.ObjectId, 要求:真, 参考:“用户”, }, 购物车项目:[ { 名称:{类型:字符串,必需:真}, 数量:{类型:数字,必填:真}, 图片:{类型:字符串,必需:真}, 价格:{类型:数字,必填:真}, countInStock: { type: Number, required: true }, 产品: { 类型:mongoose.Schema.Types.ObjectId, 要求:真, 参考:“产品”, }, }, ], }, { 时间戳:真, } ) const cartModel = mongoose.model("Cart", cartSchema) 导出默认cartModel

cartController.js

export const addToCart = asyncHandler(async (req, res) => {
  const { cartItems } = req.body
  if (cartItems && cartItems.length === 0) {
    res.status(400)
    throw new Error("No item in the cart")
  } else {
    const cart = await Cart.find({ user: req.user._id })
    if (cart && cart.length !== 0) {
      cart.cartItems = [...cartItems]

      const updatedCart = await cart.save()
      res.status(201)
      res.json(updatedCart)
    } else {
      const newCart = new Cart({
        user: req.user._id,
        cartItems,
      })
      const updatedCart = await newCart.save()
      res.status(201)
      res.json(updatedCart)
    }
  }
})

当我尝试使用以下对象更新它时

{
    "cartItems":[
        {
            "name":"Ring",
            "qty":"1",
            "image":"ring-image",
            "price":"160",
            "countInStock": 5,
            "product": "60ff8222ce6dca3378449b93"
        },{
            "name":"Wallet",
            "qty":"2",
            "image":"wallet-image",
            "price":"40",
            "countInStock": 16,
            "product": "60ff8222ce6dca3378449b93"
        }
    ]
}

它给我的错误是 cart.save() 不是一个函数。我不知道我做错了什么,因为 newCart.save() 运行良好,但是为什么 cart.save() 会引发错误?

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    错误是当我们使用 user._id 在购物车中查找时,它会返回一个数组,所以如果我们更改

    const cart = await Cart.find({ user: req.user._id })
    

    const cart = (await Cart.find({ user: req.user._id }))[0]
    

    然后就可以正常使用了

    【讨论】:

      【解决方案2】:

      find() 返回一个数组。您必须使用 findOne(),它返回一个文档。

          const cart = await Cart.findOne({ user: req.user._id })
          await cart.save()
      

      【讨论】:

        猜你喜欢
        • 2020-04-20
        • 2019-12-04
        • 2020-07-16
        • 2023-04-10
        • 2023-02-09
        • 2019-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多