TypeError: Web3.providers.WebsocketProvider ist kein Konstruktor?

Versuchen Sie, sich über Websocket mit einer Geth-Maschine zu verbinden? JS-Code.

var Web3=require('web3');
var web3 = new Web3(new 
Web3.providers.WebsocketProvider('ws://10.244.5.43:8546'));
console.log(web3.isConnected());

Sie sind sich nicht sicher, wie Sie eine Verbindung mit WebSocket herstellen sollen?

Antworten (3)

Ich hatte das gleiche Problem mit web3 v1.0.0 beta 30. Ich bin der Sache nie auf den Grund gegangen, aber das Überspringen der Provider-Konstruktion schien das Problem zu beheben:

var Web3=require('web3');
var web3 = new Web3('ws://10.244.5.43:8546');

Ich gehe davon aus, dass Sie eine Version von Web3.js verwenden, die älter als 1.0 ist. Ich glaube, dass das WebsocketProviderin 1.0 hinzugefügt wurde.

Gleiches Problem mit 1.3.4 (über TypeScript, aber ich bezweifle, dass es etwas geändert hat)

In meinem speziellen Fall verwende ich also TypeScript und es scheint, dass die Eingaben irreführend waren. Das Paket web3-providers-wssagt, dass der folgende Import gültig sein sollte:

import { WebsocketProvider } from "web3-providers-ws"

const provider = new WebsocketProvider("<host>", { ... })

Es scheint, dass die Eingaben ein bisschen lügen (oder zumindest gibt es etwas anderes, das verhindert, dass es wie erwartet funktioniert).

Ich musste Folgendes tun, um das Problem zu lösen:

import WebsocketProvider from "web3-providers-ws"

// @ts-ignore It appears default export is required otherwise it throws 'WebsocketProvider is not a constructor error', the typings says otherwise but well ...
const provider = new WebsocketProvider("<host>", { ... })

tsconfig.jsonIch habe versucht, mit verschiedenen Optionen rund um Modul- und Standardimporte herumzuspielen , aber es gelang mir nicht. Ich bin mir nicht sicher, was noch nicht funktioniert, aber zumindest habe ich eine Problemumgehung.

Hoffentlich hilft es jemand anderem.