You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调用Node模块类方法报Cannot read property 'on' of undefined如何解决?

问题根因

  1. 最初Cannot read property 'on' of undefined报错原因:listenUDP方法默认无返回值,调用后返回undefined,对undefined调用on方法自然触发类型错误,添加return this.server解决报错属于正确操作。
  2. 解析后的tally数据丢失原因:processTally方法中的this.emit('message', tally)是将事件挂载在TSL5类的实例对象上,而非UDP socket实例上。你当前只监听了UDP socket的message事件获取原始二进制数据,没有监听TSL5实例的message事件,自然收不到解析完成的结构化数据。
  3. 隐藏风险:你当前全局只实例化了一个TSL5对象,当需要监听多个端口时,多次调用listenUDP会覆盖this.server属性,导致之前的端口监听逻辑异常。

解决方法

推荐每个监听端口对应独立的TSL5实例,直接监听TSL5实例抛出的解析后数据即可,修改服务端代码对应逻辑:

// 每个端口独立实例化TSL5,避免属性覆盖冲突
const umd = new TSL5();
source_connections[i].server = umd.listenUDP(port);
// 监听TSL5实例的message事件,拿到processTally处理后的tally数据
umd.on('message', function (tally) {
    processTSL5Tally(sourceId, tally);
});

如果需要同时获取UDP原始二进制数据,可以保留对socket实例的message事件监听,两类事件监听互不冲突。

另外请确认你的TSL5模块头部已正确引入依赖:

const EventEmitter = require('events');
const dgram = require('dgram');
const debug = require('debug')('tsl5'); // 如果你使用了debug调试工具

内容的提问来源于stack exchange,提问作者JTF4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:45:03