Solidity

TypeError:嘗試將 node.js 與 truffle-contract 一起使用時,Web3 不是建構子

  • March 25, 2022

我正在嘗試將 node.js 與我的應用程序的智能合約一起使用。當我嘗試從使用預設app.js設置轉換為index.js設置時,我遇到了這個我無法解決的奇怪問題。

嘗試使用 truffle-contract 實例化我的 .json 文件時會引發錯誤。

App.contracts.Flip = TruffleContract(FlipArtifact); //at this line it goes to truffle-contract.js and throws this error: 

var BigNumber = (new Web3()).toBigNumber(0).constructor;

TypeError: Web3 is not a constructor   

我有完全相同的東西,但在我的 app.js 中,松露會自動放置它並且它工作正常。

有人可以解釋在我的 app.js/client-side 和我的 index.js/server-side 中使用 truffle-contract 之間的區別。謝謝你的幫助。

如果您在帶有 MetaMask 的瀏覽器中執行,則Web3作為副作用被注入(儘管盡量不要依賴這種行為)。在伺服器端程式碼中,您必須自己導入 web3,方法是:

const Web3 = require('web3')

在程式碼的開頭附近。您可能還需要npm install web3or yarn install web3,如果您使用的是 BigNumber(它們不再與 Web3 1.0 捆綁),那麼您可能需要指定npm install web3@^0.20.6or yarn install web3@^0.20.6

我有同樣的錯誤“…Web3 不是建構子。”

問題在於我在 html 程式碼中包含以下內容的順序:

<script src="./js/truffle-contract.js"></script>
<script src="./js/web3.min.js"></script>

我只是確保在 truffle-contract 之前呼叫了 web3.min.js 腳本,這就解決了這個問題。

正確的順序包括:

<script src="./js/web3.min.js"></script>
<script src="./js/truffle-contract.js"></script>

引用自:https://ethereum.stackexchange.com/questions/50294