【问题标题】:how to return web3 instance from nodejs to ui如何将web3实例从nodejs返回到ui
【发布时间】:2018-06-12 19:10:34
【问题描述】:

我想返回一个包含提供者对象的 web3 实例。我想将该对象返回给 UI,以便我可以在 UI 中使用该 web3 实例。这有可能实现吗? 我尝试将 web3 转换为 JSON.stringify(web3) 但抛出错误无法将圆形对象转换为字符串。

这是我的 nodejs 代码

    const provider = new HDWalletProvider(
    'dress steel phrase album average asd dd room exile web eree cause',
    'https://rinkeby.infura.io/I7P2ErGiQjuq4jNp41OE',
  );

  web3 = new Web3(provider);

我想像这样将 web3 实例从节点返回到 UI

app.get('/getWeb3', async (req, res) => {

  console.log('web3 instance', web3);

  res.json( JSON.stringify(web3)); // this is throwing error.
})

我曾尝试使用第三方库将对象转换为 json,例如 warp 库,但仍然遇到问题。任何建议都会对我有所帮助。谢谢

【问题讨论】:

  • 当你尝试stringify对象时出现什么错误?

标签: javascript node.js web3js


【解决方案1】:

您不能发送web3 实例,这没有多大意义,因为您可以直接在客户端获取web3 实例。

通常在客户端,您使用Metamask,这将允许您在不运行完整节点的情况下与以太坊网络进行交互。

客户端

if (typeof web3 !== 'undefined') {
  web3 = new Web3(web3.currentProvider);
} else {
  // set the provider you want from Web3.providers
  web3 = new Web3(new Web3.providers.HttpProvider("http://localhost:8545"));
}
// Interact with your contract
const Contract = web3.eth.contract(ABI);
const contract = Contract.at('address'); 

contract.someMethod((err, res) => console.log(res));

现在用户将与以太坊网络进行交互,使用它自己的地址和密钥,而不是使用你的私钥,这是你试图做的。

服务器上的web3 实例必须保持私有,并且不能暴露给客户端。

与其尝试将实例发送给客户端,不如告诉我们您要对该实例做什么,这是需要解决的实际问题。

【讨论】:

  • 马科斯 感谢您的回复。我尝试仅在客户端调用 web3 实例,但是当我将应用程序部署到 prod 时,它是 https 并且不接受 http 请求得到混合内容错误。那就是我想写一个nodejs api调用并返回web3实例。
  • 展示你如何在客户端实例化 web3。你的网络是 http 吗?
  • 是的,就像我在上面的代码中提到的那样。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-02
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
相关资源
最近更新 更多