You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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) => { ... })这一行的路径参数错误。
  • 解决方法:
    1. 修正路由路径:把./tokenPrice改成/tokenPrice,修改后代码如下:
      app.get("/tokenPrice", async (req, res) => {
        // 原有逻辑不变
      });
      
    2. 调用接口时传递必要参数:访问接口时需要在URL中添加addressOne和addressTwo查询参数,比如:
      http://localhost:3001/tokenPrice?addressOne=0x...&addressTwo=0x...
      
    3. 可选优化:如果需要返回获取到的价格数据,可以把返回语句改成:
      return res.status(200).json({
        tokenOnePrice: responseOne.raw,
        tokenTwoPrice: responseTwo.raw
      });
      

内容的提问来源于stack exchange,提问作者YuvedhaSasikumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:21:04