Ethereum Web3.js中未显示Solidity事件

Ethereum Web3.js中未显示Solidity事件,ethereum,solidity,web3,web3js,Ethereum,Solidity,Web3,Web3js,我试图在Solidity中设置一个事件,并从Web3收听它,但我一直收到null响应。这是我的密码: 合同的相关部分: event NewUser(string userid); function createNewUser(string memory _userId) public { // creating the user and setting it to a mapping emit NewUser(_userId); } Javascript,来自以太坊的ref

我试图在
Solidity
中设置一个事件,并从
Web3
收听它,但我一直收到
null
响应。这是我的密码:

合同的相关部分:

event NewUser(string userid);

function createNewUser(string memory _userId) public {
    // creating the user and setting it to a mapping 
    emit NewUser(_userId);
}
Javascript
,来自以太坊的
reference:

async function watchEvents(contract) {
    contract.events.allEvents({
       fromBlock: 0
    },function(error, event){ console.log('all events?'); console.log(event); })
  .on('data', function(event){
     console.log(event); // same results as the optional callback above
  })
  .on('changed', function(event){
     // remove event from local database
  })
  .on('error', console.error);
}
使用另一个
javascript
函数,我可以看到正在创建新用户,并且事务在
Ganache
上被列为成功。但是
watchEvents
方法保持打印
null


我错过了什么

请连接到websocket提供程序以启用侦听事件。要运行websocket提供程序,请使用以下标志运行节点:

--ws --wsport XXXX --wsorigins="*"
请注意,出于安全原因,您很可能不希望允许*,而是希望更加明确

然后通过以下方式连接到它:

const web3=new web3(new web3.providers.WebsocketProvider(“ws://localhost:XXXX”))

您是以太坊提供商吗?infura还是自己的节点?@YegorZaremba我正在使用自己的节点。另一个线程上的某个人告诉我,
null
的原因是事件仅由
websockets
提供程序支持。我还没有测试过。