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

Node.js+Web3.js部署服务器后getBalance()无法调用问题求助

问题:Node.js + Web3.js部署服务器后无法连接区块链节点

环境信息

  • Node.js版本:v18.14.1
  • Web3.js版本:v1.8.2

问题描述

本地运行代码时,通过web3.eth.getBalance()可以正常查询区块链账户余额,并通过Express路由返回结果。但将代码部署到服务器后,getBalance()执行失败进入catch块,返回空对象{}。

为排查问题编写的连接测试代码,本地运行时返回is connected,但部署到服务器后返回错误:

Wow. Something went wrong: Error: CONNECTION ERROR: Couldn't connect to node https://mainnet.infura.io/v3/e365c07adf544980a71258eca29fceed.

已尝试的解决方法

  • 更换Web3 provider
  • 使用不同的账户地址
  • 通过web3.eth.accounts.privateKeyToAccount(privateKey)成功获取正确地址,但getBalance()仍无法正常执行
  • 尝试交易类函数同样失败
  • 查阅大量文档和教程未找到解决方案

核心代码

const Web3 = require('web3');
const express = require('express');

const web3 = new Web3('https://mainnet.infura.io/v3/<MYINFURAKEY>');

const app = express();
app.use(express.json());

app.get('/', (req, res) => {
  web3.eth.getBalance("0x7830c87C02e56AFf27FA8Ab1241711331FA86F43").then(balance => {
    res.send(balance);
  })
  .catch(error => {
      res.send(error);
  });
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

连接测试代码

const Web3 = require('web3');
const express = require('express');

web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/e365c07adf544980a71258eca29fceed'));

const app = express();
app.use(express.json());

app.get('/',(req, res) => {
    web3.eth.net.isListening()
    .then(() => res.send('is connected'))
    .catch(e => res.send('Wow. Something went wrong: '+ e));
});

app.listen(3000, () => {
  console.log('Server listening on port 3000');
});

排查与解决建议

  1. 服务器网络限制检查
    登录服务器,执行curl https://mainnet.infura.io/v3/你的Infura密钥测试连通性。如果无法访问,检查服务器的安全组/防火墙规则,确保放行443端口的出站流量。

  2. Infura IP白名单配置
    如果你的Infura项目开启了IP白名单,需要将服务器的公网IP添加到白名单列表中,否则Infura会拒绝非白名单IP的请求。

  3. 配置Provider超时时间
    服务器网络延迟可能高于本地,默认超时时间太短导致连接失败。修改provider创建代码,增加超时设置:

    const provider = new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/你的密钥', {
      timeout: 10000 // 设置为10秒超时
    });
    const web3 = new Web3(provider);
    
  4. 重新安装依赖
    服务器环境可能存在依赖冲突,删除node_modules文件夹和package-lock.json文件,重新执行npm install安装依赖,确保依赖版本与本地一致。

  5. 代理配置(如果服务器在受限网络)
    如果服务器需要通过代理访问外部网络,在创建HttpProvider时配置代理选项,或者设置系统级环境变量HTTP_PROXY/HTTPS_PROXY。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 17:42:41