RSocketTcpClient не является конструктором — NodeJS с Rsocket-js

#node.js #rsocket

Вопрос:

Я хотел бы запустить TCP-клиент Rsocket на NodeJS, используя простой пример из руководства Rsocket (https://rsocket.io/guides/rsocket-js/client/rsocket-tcp-client ):

 async function createClient(options) {
  const client = new RSocketClient({
    setup: {
      dataMimeType: 'text/plain',
      keepAlive: 1000000, // avoid sending during test
      lifetime: 100000,
      metadataMimeType: 'text/plain',
    },
    transport: new RSocketTCPClient({
      host: options.host,
      port: options.port,
    }),
  });

  return await client.connect();
}

async function run() {
  const rsocket = await createClient({
    host: '127.0.0.1',
    port: 9898,
  });
}

await run();
 

но когда я пытаюсь запустить приложение, node app.js возникает ошибка:
TypeError: RSocketTcpClient is not a constructor .
Я проверил реализацию RSocketTcpClient , и похоже, что есть конструктор:

 export class RSocketTcpClient extends RSocketTcpConnection {
  constructor(options: net.TcpSocketConnectOpts, encoders?: Encoders<any>);
  connect(): void;
}
 

Кто-нибудь может сказать мне, что не так? Я использую простой package.json:

 {
  "name": "rsocket-example",
  "private": true,
  "description": "RSocket example",
  "version": "0.0.27",
  "repository": {
    "type": "git",
    "url": "https://github.com/rsocket/rsocket-js.git"
  },
  "type": "module",
  "dependencies": {
    "rsocket-core": "^0.0.27",
    "rsocket-flowable": "^0.0.27",
    "rsocket-tcp-server": "^0.0.27",
    "rsocket-types": "^0.0.27",
    "rsocket-websocket-client": "^0.0.27",
    "rsocket-websocket-server": "^0.0.27"
  }
}
 

Ответ №1:

Исходный проект, rsocket-js здесь, похоже, неправильно сконфигурировал перенос, позволяя экспорту по умолчанию для RSocketTCPClient объявления класса переходить в default переменную.

Затем вы можете либо настроить конфигурацию транспилятора в своем собственном проекте, либо использовать только default экспортированный объект следующим образом:

 // instead of new RSocketTCPClient()
new RSocketTCPClient.default({
    host: options.host,
    port: options.port,
});