node.js - TypeError: Client is not a constructor - 最新版本的 kafka-node 出错
问题描述
Mosca 给出了这个错误:
TypeError: Client is not a constructor
at new KafkaAscoltatore (/home/x/Desktop/broker/node_modules/mosca/node_modules/ascoltatori/lib/kafka_ascoltatore.js:59:26)
at Object.build (/home/x/Desktop/broker/node_modules/mosca/node_modules/ascoltatori/lib/ascoltatori.js:77:12)
at /home/x/Desktop/broker/node_modules/mosca/lib/server.js:181:40
at makeCall (/home/x/Desktop/broker/node_modules/fastseries/series.js:117:7)
at ResultsHolder.release (/home/x/Desktop/broker/node_modules/fastseries/series.js:96:9)
at series (/home/x/Desktop/broker/node_modules/fastseries/series.js:39:14)
at Object.series (/home/x/Desktop/broker/node_modules/steed/steed.js:90:7)
at new Server (/home/x/Desktop/broker/node_modules/mosca/lib/server.js:171:9)
at Object.<anonymous> (/home/x/Desktop/broker/broker.js:118:14)
at Module._compile (internal/modules/cjs/loader.js:689:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:700:10)
at Module.load (internal/modules/cjs/loader.js:599:32)
at tryModuleLoad (internal/modules/cjs/loader.js:538:12)
at Function.Module._load (internal/modules/cjs/loader.js:530:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:742:12)
at startup (internal/bootstrap/node.js:266:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:596:3)
环境
- 节点版本:v10.9.0
- Kafka节点版本:最新
- Mosca 版本:最新
我试过的
我打开/home/x/Desktop/broker/node_modules/mosca/node_modules/ascoltatori/lib/kafka_ascoltatore.js
并查看下面的行后发现问题与 kafka-node 版本有关:
this._opts.kafka = this._opts.kafka || require("kafka-node");
当我删除this._opts.kafka
时,它开始正常工作。然后我打印了两个我发现新版本中没有客户端构造函数。这是我的打印结果:
this._opts.kafka (kafka-node v4.0.1 latest)
返回没有客户端的 HighLevelProducer,另一方面 require("kafka-node") (v0.5.9) 返回 HighLevelConsumer。
代码:
var backend = {
type: "kafka",
kafka: require('kafka-node'),
json: false,
connectionString: "IP:2181",
defaultEncoding: "utf8",
};
var moscaSettings = {
interfaces: [
{ type: "mqtt", port: PORT }
],
id: "mosca",
stats: false,
publishNewClient: false,
publishClientDisconnect: false,
publishSubscriptions: false,
backend: backend,
};
var server = new mosca.Server(moscaSettings); // Error pops here
如上所述,我可以让 Kafka 与旧版本一起使用,但我认为这只是一个快速修复,所以我希望有人能引导我找到正确的解决方案。
解决方案
这个问题是由于我使用了旧版本的 kafka-node 中的一个例子造成的。当我用来自 kafka-node GitHub 的新示例替换代码时,问题就解决了。
推荐阅读
- sorting - 按给定日期的日期对 Twig 数组进行排序
- php - WordPress - 根据用户 ID 删除功能
- android - 减量运算符在android studio中不起作用
- html - 在使用 javascript 加载内容的网页上进行网页性能测试
- javascript - 未拾取 Package.json 变量
- selenium-webdriver - 使用 selenium 在内存数据库中连接 H2 时出现问题
- javascript - 如果浏览器无法发送/接收 UDP,那么在 node.js 中使用 UDP 有什么意义?
- javascript - 将网络摄像头流从客户端发送到服务器以进行图像分析
- javascript - React Hook useEffect 缺少依赖项:“roomID”和“sotreId”。要么包含它们,要么删除依赖数组 react-hooks/exhaustive-deps
- node.js - MongoDB 管理来自节点 js 服务器的访问