更新模型字段时出现JSON循环结构错误

pkmbmrz7  于 2023-01-10  发布在  其他
关注(0)|答案(1)|浏览(169)

我正在使用NodeJS、express和MongoDB构建一个电子商务Web应用程序,我正在开发一个API,用于将产品ID和数量存储在一个数组中,该数组是用户的购物车。
以下是用户模型:

const userSchema = mongoose.Schema({
    email: {
        type: String,
        required: true
    },
    password: {
        type: String,
        required: true
    },
    username: {
        type: String,
        required: true
    },
    access_level: {
        type: Number,
        default: 1
    },
    cart: {
        type: [cartProductSchema],
        default: []
    }
})

这是cartProductSchema的模型:

const cartProductSchema = new mongoose.Schema({
    product_id: {
        type: mongoose.Schema.Types.ObjectId,
        ref: 'Product'
    },
    quantity: {
        type: Number,
        required: true,
        validate: { validator: Number.isInteger }
    }
}, { _id: false })

这是产品的型号:

const productSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
    },
    description: {
        type: String,
        required: true,
    },
    price: {
        type: Number,
        required: true,
    },
    stock: {
        type: Number,
        required: true,
        validate: { validator: Number.isInteger }
    }
}, {timestamps: true})

以下是发生错误的路由器的代码段:

// Add product to user's cart
const product = await Product.findOne({_id: req.body.product_id})
if (!product) {
    return res.status(http.statusNotFound).json({
        errors: [{ msg: "Invalid product id" }]
    })
}

let cart = user.cart.slice()
cart.push({ product_id: product._id, quantity: req.body.quantity })

user.cart = cart // this is the line that causes the error
            
await user.save()
res.json({ msg: "Product added to cart" })

当我尝试将一个包含product_idquantity的JSON对象推送到用户购物车时,我遇到了一个错误。JSON对象中有一个循环引用导致了这个错误,但我不知道我做错了什么。错误堆栈跟踪没有真正

TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Object'
    |     property '__parentArray' -> object with constructor 'Array'
    --- index 0 closes the circle
    at stringify (<anonymous>)

如果我取消user.cart = cart行的注解,我就不会得到这个错误。当我尝试更新购物车字段时,我得到这个错误。我尝试用不同的格式更新购物车字段,但都失败了。
我尝试直接推到购物车字段,但我得到相同的错误:user.cart.push({ product_id: product._id, quantity: req.body.quantity})
我还尝试用MongoDB查询直接更新购物车,但仍然得到相同的错误:

await User.updateOne(
    {_id: user._id}, 
    { $push: { cart: { product_id: product._id, quantity: req.body.quantity } }}
)
3htmauhk

3htmauhk1#

我知道问题出在哪里了。抱歉给你添麻烦了。我应该告诉你我是用jest测试来测试API的。结果发现测试中出现了一个错误,我在npm测试脚本中添加了一个--detectOpenHandles标记之后就可以调试这个错误了。

相关问题