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