TypeError: Web3.providers.WebsocketProvider no es un constructor?

¿Intentando conectarse a una máquina geth a través de websocket? código JS.

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

¿No está seguro de cómo conectarse usando WebSocket?

Respuestas (3)

Tuve el mismo problema con web3 v1.0.0 beta 30. Nunca llegué al fondo, pero al saltar la construcción del proveedor pareció solucionarlo:

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

Supongo que está utilizando una versión de Web3.js anterior a la 1.0. Creo que WebsocketProviderse agregó en 1.0.

Mismo problema con 1.3.4 (a través de TypeScript pero dudo que haya cambiado algo)

Entonces, en mi caso particular, estoy usando TypeScript y parece que las escrituras fueron engañosas. El paquete web3-providers-wsdice que la siguiente importación debe ser válida:

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

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

Parece que los tipos mienten un poco (o al menos, hay algo más que impide que funcione como se esperaba).

Tuve que hacer lo siguiente para solucionar el problema:

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>", { ... })

Traté de jugar con varias tsconfig.jsonopciones alrededor del módulo y las importaciones predeterminadas, pero no tuve éxito. No estoy seguro de lo que no funciona todavía, pero al menos tengo una solución.

Espero que ayude a alguien más.