Express与Moralis Token Price API无法获取数据及路由错误排查
关于Moralis Token Price API的问题及疑问
问题背景
我正在跟随Moralis Web3的YouTube教程学习,使用Moralis Token Price API获取数据时遇到问题:
- 预期执行
npm start后,控制台输出代币价格详情(示例如下):
{ nativePrice: { value: '13851123944545175839', decimals: 18, name: 'Ether', symbol: 'ETH' }, usdPrice: 23176.58785953117, exchangeAddress: '0x1f98431c8ad98523631ae4a59f267346ea31f984', exchangeName: 'Uniswap v3' }
且本地访问接口返回空JSON对象{};但实际本地访问时显示Cannot GET /tokenPrice。
我尝试了Moralis文档中的其他方法可以正常工作,但按照教程编写的代码报错,代码如下:
const express = require("express"); const Moralis = require("moralis").default; const { EvmChain } = require("@moralisweb3/common-evm-utils"); const app = express(); const cors = require("cors"); require("dotenv").config(); const port = 3001; app.use(cors()); app.use(express.json()); app.get("./tokenPrice", async (req, res) => { const { query } = req; const responseOne = await Moralis.EvmApi.token.getTokenPrice({ address: query.addressOne, }); const responseTwo = await Moralis.EvmApi.token.getTokenPrice({ address: query.addressTwo, }); console.log(responseOne.raw); console.log(responseTwo.raw); return res.status(200).json({}); }); Moralis.start({ apiKey: process.env.MORALIS_KEY, }).then(() => { app.listen(port, () => { console.log(`Listening for API Calls`); }); });
疑问解答
1. {query}和addressOne是什么,属于Express还是Moralis的属性?
{query}是Express的内置属性,它是从HTTP请求的URL查询参数中解析出来的对象,比如访问http://localhost:3001/tokenPrice?addressOne=0x123时,req.query就会包含{ addressOne: "0x123" }。addressOne不是Express或Moralis的内置属性,是教程中约定的自定义查询参数名,用来指定第一个要查询价格的代币合约地址,调用接口时需要在URL中手动传递这个参数。
2. 错误发生的原因、位置及解决方法是什么?
- 原因:Express路由路径格式错误,使用了
./tokenPrice,而Express的路由路径应该以/开头,不能包含.。 - 位置:代码中
app.get("./tokenPrice", async (req, res) => { ... })这一行的路径参数错误。 - 解决方法:
- 修正路由路径:把
./tokenPrice改成/tokenPrice,修改后代码如下:app.get("/tokenPrice", async (req, res) => { // 原有逻辑不变 }); - 调用接口时传递必要参数:访问接口时需要在URL中添加
addressOne和addressTwo查询参数,比如:http://localhost:3001/tokenPrice?addressOne=0x...&addressTwo=0x... - 可选优化:如果需要返回获取到的价格数据,可以把返回语句改成:
return res.status(200).json({ tokenOnePrice: responseOne.raw, tokenTwoPrice: responseTwo.raw });
- 修正路由路径:把
内容的提问来源于stack exchange,提问作者YuvedhaSasikumar
相关产品推荐
相关产品推荐

