Solidity
TypeError:嘗試將 node.js 與 truffle-contract 一起使用時,Web3 不是建構子
我正在嘗試將 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 web3
oryarn install web3
,如果您使用的是 BigNumber(它們不再與 Web3 1.0 捆綁),那麼您可能需要指定npm install web3@^0.20.6
oryarn 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>