Я пытаюсь использовать node.js со своим смарт-контрактом для своего приложения. Когда я пытался перейти от использования настроек по умолчанию app.js
к index.js
настройкам, я столкнулся с этой странной проблемой, которую не могу исправить.
Он выдает ошибку при попытке создать экземпляр моего файла .json с помощью truffle-contract.
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. Спасибо за любую помощь.
Если вы работаете в браузере с MetaMask, то Web3
вводится как побочный эффект (хотя старайтесь не полагаться на такое поведение). В коде на стороне сервера вы должны импортировать web3 самостоятельно, указав что-то вроде:
const Web3 = require('web3')
рядом с началом вашего кода. Вам также может понадобиться npm install web3
или yarn install web3
, и если вы используете BigNumber (который они больше не связывают с Web3 1.0), то вы, вероятно, захотите указать npm install web3@^0.20.6
или yarn install web3@^0.20.6
.
У меня была такая же ошибка «... Web3 не является конструктором».
Проблема была в том порядке, в котором я включил следующее в html-код:
<script src="./js/truffle-contract.js"></script>
<script src="./js/web3.min.js"></script>
Я только что убедился, что скрипт web3.min.js вызывается до трюфельного контракта, и это решило проблему.
Правильный порядок включения:
<script src="./js/web3.min.js"></script>
<script src="./js/truffle-contract.js"></script>
савард
ВБТ