TypeError: Web3.providers.WebsocketProvider не является конструктором?

Пытаетесь подключиться к гет-машине через веб-сокет? JS-код.

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

Не знаете, как подключиться с помощью WebSocket?

Ответы (3)

У меня была такая же проблема с web3 v1.0.0 beta 30. Никогда не добирался до сути, но пропуск конструкции провайдера, похоже, исправил это:

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

Я предполагаю, что вы используете версию Web3.js старше 1.0. Я считаю, что это WebsocketProviderбыло добавлено в 1.0.

Та же проблема с 1.3.4 (через TypeScript, но я сомневаюсь, что это что-то изменило)

Итак, в моем конкретном случае я использую TypeScript, и кажется, что типизация вводила в заблуждение. Пакет web3-providers-wsговорит, что следующий импорт должен быть допустимым:

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

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

Кажется, типизация немного лжет (или, по крайней мере, есть что-то еще, что мешает ему работать должным образом).

Мне пришлось сделать следующее, чтобы решить проблему:

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.jsonпараметрами модуля и импорта по умолчанию, но безуспешно. Не уверен, что еще не работает, но, по крайней мере, у меня есть обходной путь.

Надеюсь, это поможет кому-то еще.