【问题标题】:TypeError: Converting circular structure to JSON when sending array via expressTypeError:通过express发送数组时将循环结构转换为JSON
【发布时间】:2020-02-14 23:13:35
【问题描述】:

我有几个不同的文件,其中包含多个相关的功能,我将它们用作各种控制器。其中一个我有一个承诺,并且在尝试解决它时遇到了我的问题。它的完成方式与我最常见的传递单个值不同。我正在尝试使用包含两个键的 JavaScript 对象进行解析,一个具有布尔值,另一个具有值的数组。

我在 catch 块中遇到的实际错误是

TypeError:将循环结构转换为 JSON

这是我试图解决承诺的方法

resolve({success: true, names: body.names});

其中body.names 等于下面的数组

[ [ 'John Smith', 'Jane Doe' ], [ 'John Smith' ] ]

我的目标是让承诺以某种方式解决,我可以传递我的“成功”值来进行一些额外的处理(如果为 false,则不是错误,需要作为非错误处理),但也希望成为传递名称数组,以便我可以在我的 API 响应中传递它。

编辑**

更多代码

exports.formatWithNames = function(policy) {
    return new Promise((resolve, reject) => {
        options.json = {policy};
        request.post('/userListByIDs', options, (err, response, body) => {
            if (err) {
                logger.error(`policy: formatWithNames: ${JSON.stringify(err)}`);
                reject({success: false, message: 'Failure'});
            }
            logger.info(`policy: formatWithNames: body: ${JSON.stringify(body)}`);
            resolve({success: true, names: body.names});
        });
    });
}

那叫什么

Policy.find({ companyID: req.body.user.companyID }, (err, policy) => {
        if (err) {
            logger.info(`getAllPolicy: Policy find: Error message: ${err}`);
            return res.status(500).json({ success: false, message: 'Error finding policies.' });
        }

        userController.formatWithNames(policy)
        .then(response => {
            console.log(response)
            return res.status(200).json({ success: true, policy: res });
        })
        .catch(err => {
            logger.error(`getAllPolicy: formatWithNames: Error message: ${err}`);
            return res.json({ success: false, policy: null });
        })


    });

【问题讨论】:

  • 您的问题中显示的代码中的任何内容都不会产生该错误。请提供更多详细信息,尤其是minimal, reproducible example
  • @Phil 什么样的事情会产生错误?我包括了我认为正在制作它的东西。不知道还能发布什么
  • @Phil 添加了所有可能相关的代码
  • 看起来你这样做了policy: res ...并且JSON字符串化res会导致该错误...你的意思是policy: response吗?哎呀 - 看到你自己回答了一个简单的错字
  • @Bravo Bingo,那个简单的错字让我头晕了几个晚上,现在想知道我做错了什么。

标签: javascript node.js promise es6-promise


【解决方案1】:

好的解决方案非常简单,只是我有一个名为miss的变量,现在感觉很低落。在我的 formatWithNames 块中返回我的响应时,我应该使用 policy: response 而不是 policy: res。所以似乎正在发生的事情是 res 被发回,但因为我将它包含在响应中,它正在创建对自身的循环引用(循环?)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-25
    • 2018-10-05
    • 2016-01-22
    • 2017-06-29
    • 2019-01-05
    • 1970-01-01
    相关资源
    最近更新 更多