【问题标题】:Sequelize: TypeError: Converting circular structure to JSONSequelize:TypeError:将循环结构转换为 JSON
【发布时间】:2022-02-12 17:36:03
【问题描述】:

我有OrdersDisplay 模型。协会是这样运作的

Display.associate = models => Display.hasOne(models.Orders);

orders 表有displayId 引用,我的设计中没有任何循环。但是我在下面收到此错误。

TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Socket'
    |     property '_writableState' -> object with constructor 'WritableState'
    |     property 'afterWriteTickInfo' -> object with constructor 'Object'
    --- property 'stream' closes the circle
    at JSON.stringify (<anonymous>)

如果我不包括下面显示的dbDisplay,错误就会消失。

export const getAllOrders = async (req, res) => {
    console.log("GET ALL ORDERS")
    let orders = await dbOrders.findAll({
        include: [{
            model: dbDisplay,
        }]
    }).catch(error => res.status(400).send(error));
    try {
        res.status(200).send(orders) // error here

    } catch (err) {
        console.log(err)
    }
}

【问题讨论】:

    标签: mysql node.js sequelize.js associations


    【解决方案1】:

    不要尝试自己发送模型实例。使用他们的get({ plain: true }) 方法获取普通对象:

    export const getAllOrders = async (req, res) => {
        console.log("GET ALL ORDERS")
        try {
            const orders = await dbOrders.findAll({
            include: [{
                model: dbDisplay,
            }]
            })
            res.status(200).send(orders.map(x => x.get({ plain: true })))
        } catch (err) {
            console.log(err)
            res.status(400).send(err) 
        }
    }
    

    【讨论】:

    • TypeError: orders.map is not a function
    • let orders = await dbOrders.findAll({ 的结果应该是一个数组。你能检查一下吗?
    • 请不要混淆then/catchawait。使用 try/catch` 和 await 来捕获错误并将它们发送给客户端
    • orders 是一个复杂的对象,在某些变量上有一些 [Circular] 值
    • 在答案中尝试更新代码
    猜你喜欢
    • 2016-01-11
    • 2017-04-03
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-31
    • 2018-10-05
    • 2016-01-22
    相关资源
    最近更新 更多