TypeError:将循环结构转换为 JSON --> 从具有构造函数“ClientRequest”的对象开始

Posted

技术标签:

【中文标题】TypeError:将循环结构转换为 JSON --> 从具有构造函数“ClientRequest”的对象开始【英文标题】:TypeError: Converting circular structure to JSON --> starting at object with constructor 'ClientRequest' 【发布时间】:2021-02-20 10:36:41 【问题描述】:

我是nest.js 初学者,我正在尝试用我的代码实现Axios,但出现了这个错误,我想修复它。

    --> starting at object with constructor 'ClientRequest'
    |     property 'socket' -> object with constructor 'Socket'
    --- property '_httpMessage' closes the circle +188941ms
TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'ClientRequest'
    |     property 'socket' -> object with constructor 'Socket'
    --- property '_httpMessage' closes the circle
    at JSON.stringify (<anonymous>)
    at stringify (D:\CUSportcomplex-register\sso-reg\node_modules\express\lib\response.js:1123:12)
    at ServerResponse.json (D:\CUSportcomplex-register\sso-reg\node_modules\express\lib\response.js:260:14)
    at ExpressAdapter.reply (D:\CUSportcomplex-register\sso-reg\node_modules\@nestjs\platform-express\adapters\express-adapter.js:24:57)
    at RouterResponseController.apply (D:\CUSportcomplex-register\sso-reg\node_modules\@nestjs\core\router\router-response-controller.js:13:36)
    at D:\CUSportcomplex-register\sso-reg\node_modules\@nestjs\core\router\router-execution-context.js:173:48
    at processTicksAndRejections (internal/process/task_queues.js:93:5)
    at async D:\CUSportcomplex-register\sso-reg\node_modules\@nestjs\core\router\router-execution-context.js:47:13
    at async D:\CUSportcomplex-register\sso-reg\node_modules\@nestjs\core\router\router-proxy.js:9:17

这是我的 app.service.ts

async validateSSO(appticket): Promise<SsoContent> 
        let instance = axios.create(
            baseURL: "http://localhost:8080/",
            headers: 
                'DeeAppId': config.DeeAppId,
                'DeeAppSecret': config.DeeAppSecret,
                'DeeTicket': appticket
            
        );
        instance.get("/serviceValidation")
            .then(response => 
                this.ssoContent = response;
            )
            .catch(error => 
                return (error);
            );

        return this.ssoContent;

    

这是我的 app.controller.ts

    @Get('validation/:appticket')
    async validateSSO(
        @Param('appticket') appticket: string
        //DeeAppTicket is sented via Front-end
    ): Promise<SsoContent> 
        return this.registeringService.validateSSO(appticket);
    

感谢您的帮助:)

【问题讨论】:

【参考方案1】:

首先,nest.js 为您提供开箱即用的 HttpService,您可以通过 DI 注入它: https://docs.nestjs.com/techniques/http-module

第二 - 您正在尝试存储整个响应对象,该对象是复杂的数据结构并包含错误消息中所述的循环依赖项(TypeError:将循环结构转换为 JSON)

你应该做的是要么映射你需要的数据,而不是存储整个圆形对象,

或者您应该查找一些可以解析循环 json 的库:https://www.npmjs.com/package/flatted

【讨论】:

没问题。如果你会更加挣扎。让我们知道,我们会尽力帮助您! :) alr 使用扁平化包,但仍然无法解决【参考方案2】:

而不是存储整个响应对象,它是一个循环对象。您可以存储响应的data 对象键。应该没问题

【讨论】:

【参考方案3】:

今天我遇到了这个问题,我设法解决它的一种方法是而不是返回:

this.ssoContent = response;

我回来了:

this.ssoContent = response.data;

【讨论】:

您需要改进这个答案,它可以帮助其他人。只是返回数据实际上有效【参考方案4】:

当您忘记在 async 函数中输入关键字 await 时也会发生这种情况。

【讨论】:

【参考方案5】:

当我的应用程序(nest.js 应用程序)尝试向另一个应用程序(Nest.js 应用程序)发送请求时,我遇到了这个问题。问题是服务器的响应。我无法解决它,而是使用超级代理库。 https://www.npmjs.com/package/superagent 很容易解决。

【讨论】:

以上是关于TypeError:将循环结构转换为 JSON --> 从具有构造函数“ClientRequest”的对象开始的主要内容,如果未能解决你的问题,请参考以下文章

实现数据表时遇到错误-TypeError:将循环结构转换为 JSON

如何解决 NodeJS 中的“TypeError:将循环结构转换为 JSON”

TypeError:将循环结构转换为 JSON --> 从具有构造函数“ClientRequest”的对象开始

angularJs TypeError:将循环结构转换为JSON

尽管函数执行正确,但“将循环结构转换为 JSON”错误

由于 json 的循环结构,我不断获得状态 500