使用Node.js从Solscan API提取交易数据时遇forEach未定义错误
解决方法
1. 修复API请求URL的语法错误
你的代码里URL末尾多了转义的双引号%22,导致请求地址无效,服务器返回的数据结构不符合预期,最终response.data.result为undefined。把URL里的%22删掉即可:
const response = await axios.get("https://public-api.solscan.io/transaction/last?limit=10");
2. 增加数据存在性校验
即使URL修复,也可能因为API返回异常导致transactions为undefined,所以在调用forEach前必须先判断数据有效性,避免报错:
if (transactions && Array.isArray(transactions)) { transactions.forEach((transaction) => { // 交易数据打印逻辑 }); } else { console.log("未获取到有效交易数据"); }
3. 修正Solana交易字段的错误
Solana交易体系里没有ETH单位,且你写的部分字段名与Solscan API返回的实际字段不符:
transactionHash→ 实际字段为txHashfromAddress→ 实际字段为sendervalue→ Solana最小单位是lamport,1 SOL = 1e9 lamports,需要做单位转换- 没有直接的
toAddress字段,Solana交易基于账户模型,可根据需求查看tokenTransfers(代币交易)或其他关联账户信息
修正后的打印逻辑示例:
transactions.forEach((transaction) => { console.log(`Transaction Hash: ${transaction.txHash}`); console.log(`Block Number: ${transaction.block}`); console.log(`Sender Address: ${transaction.sender}`); const solValue = transaction.lamports / 1e9; console.log(`Value: ${solValue} SOL`); console.log("-------------------------------"); });
完整修正后的代码
const axios = require("axios"); async function parseTransactionData() { try { const response = await axios.get("https://public-api.solscan.io/transaction/last?limit=10"); const transactions = response.data.result; if (transactions && Array.isArray(transactions)) { transactions.forEach((transaction) => { console.log(`Transaction Hash: ${transaction.txHash}`); console.log(`Block Number: ${transaction.block}`); console.log(`Sender Address: ${transaction.sender}`); const solValue = transaction.lamports / 1e9; console.log(`Value: ${solValue} SOL`); console.log("-------------------------------"); }); } else { console.log("未获取到有效交易数据"); } } catch (error) { console.error("请求错误:", error.message); } } parseTransactionData();
内容的提问来源于stack exchange,提问作者Augustin Negura
相关产品推荐
相关产品推荐

