用 GraphQL 查询 Uniswap 获取 ETH 价格:解决空响应正文问题
2024-03-24 18:31:49
用 GraphQL 查询 Uniswap 获取 ETH 价格
作为 GraphQL 和 Uniswap 的初学者,你可能会面临一个常见问题:使用 Node.js 查询 ETH 价格时遇到 undefined
响应正文。本文将深入探讨导致这一问题的潜在原因,并提供一个逐步的解决方案,让你轻松获取 ETH 价格。
问题
当你使用以下代码向 Uniswap 发送查询时,响应正文始终为空:
const uniSwapResponse = await fetch("https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({ query: '{ bundle(id: "1" ) {ethPrice} }' })
});
console.log(uniSwapResponse.data);
解决方案
要解决这个问题,只需执行以下三个步骤:
1. 解析响应: fetch()
返回一个 Promise,该 Promise 解析为一个 Response 对象。为了访问响应的 JSON 数据,我们需要使用 .json()
方法对其进行解析。
2. 打印解析后的数据: 解析后,使用 console.log()
打印解析后的 JSON 数据,而不是 uniSwapResponse.data
。
3. 更新代码: 更新后的代码如下所示:
fetch("https://api.thegraph.com/subgraphs/name/uniswap/uniswap-v2", {
method: "POST",
headers: {
"Content-Type": "application/json",
Accept: "application/json",
},
body: JSON.stringify({ query: '{ bundle(id: "1") {ethPrice} }' })
}).then(r => r.json())
.then(data => console.log("ETH price:", data.data.bundle.ethPrice))
代码说明
.json()
方法解析uniSwapResponse
并返回一个 Promise,该 Promise 解析为已解析的 JSON 数据。console.log()
打印解析后的 JSON 数据,其中包含 ETH 价格。
其他提示
- 确保请求的 GraphQL 端点和查询字符串正确无误。
- 检查 Uniswap API 文档以获取最新信息和最佳实践。
结论
通过遵循这些步骤,你应该能够使用 GraphQL 成功查询 Uniswap 并获取 ETH 价格。祝你开发顺利!
常见问题解答
1. 为什么我的响应正文最初为空?
响应正文最初为空,是因为我们忘记了解析响应并获取 JSON 数据。
2. data.data.bundle.ethPrice
是什么意思?
解析的 JSON 数据采用嵌套结构。data
表示解析后的 JSON 数据,data.data
表示数据对象,data.data.bundle
表示包对象,data.data.bundle.ethPrice
表示 ETH 价格。
3. 如何获取其他代币的价格?
更改查询字符串即可获取其他代币的价格。例如,要获取 USDC 价格,请使用以下查询字符串:{ bundle(id: "1") {usdPrice} }
。
4. 我可以获取历史价格数据吗?
否,该 API 不支持获取历史价格数据。
5. Uniswap API 有使用限制吗?
是的,Uniswap API 有速率限制和其他使用限制。请参阅官方文档以获取更多详细信息。