NodeJS 将循环结构转换为JSON -->从具有构造函数'Socket'的对象开始

xe55xuns  于 2023-03-29  发布在  Node.js
关注(0)|答案(1)|浏览(304)

我有一些错误。我想显示一个数据从API。这是一个api:Click Here .
这是我获取这些数据的请求:

import Http from "http";

var positions = await Http.get(
    "http://dev3.dansmultipro.co.id/api/recruitment/positions.json"
);
var position = JSON.stringify(positions);
console.log(position);

这是我的错误:

TypeError: Converting circular structure to JSON
    --> starting at object with constructor 'Socket'
    |     property 'parser' -> object with constructor 'HTTPParser'
    --- property 'socket' closes the circle
    at JSON.stringify (<anonymous>)
    at get (E:\Project Freelance\Github-Job\server2\src\controllers\jobs.controller.js:17:33)
    at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
node:internal/process/promises:288
            triggerUncaughtException(err, true /* fromPromise */);

我试着用CircularJSON来实现:

import Http from "http";
import CircularJSON from "circular-json";

var positions = await Http.get(
    "http://dev3.dansmultipro.co.id/api/recruitment/positions.json"
);
var position = CircularJSON.stringify(positions);
var data = JSON.parse(position);
console.log(data.res);

结果是空的,怎么了?我该怎么办?

guicsvcw

guicsvcw1#

这段代码有很多错误。
第一,这一声明:

var positions = await Http.get(
    "http://dev3.dansmultipro.co.id/api/recruitment/positions.json"
);

http.get()并没有做你认为它做的事情。首先,http.get()不返回promise。它返回一个request对象。人们会使用该request对象来编写请求的主体(对于POST或PUT之类的方法)。它不返回对该http请求的响应。
其次,由于它不返回promise,所以这里的await是没有意义的。
第三,从http.get()获取响应对象的唯一方法是传递一个回调函数。因此,您的代码根本无法获取响应。
所以,你尝试JSON序列化的是一个请求对象,它包含一个原生对象(TCP套接字),并且在JSON中是不可序列化的,也没有理由这样做,因为即使它被序列化了,当它被取消序列化时也不能再次使用。套接字本身是不可序列化的。
请参阅相关答案,了解如何使用http.get(),以及如果要使用promise,有哪些选项。下面是一个获取JSON的简单示例。其他答案显示了更多选项。

function httpGetJSON(url) {
    return new Promise((resolve, reject) => {
         http.get(url, response => {
             let result = "";
             response.on('data', data => {
                  result += data.toString();
             }).on('end', () => {
                  try {
                      const obj = JSON.parse(result);
                      resolve(obj);
                  } catch (e) {
                      reject(e);
                  }
             }).on('error', reject);
         });
    });
}

相关问题