使用KafkaMagic筛选非空属性Kafka消息时JS查询报错求助
KafkaMagic筛选Kafka消息时JavaScript查询报错解决
问题场景
使用KafkaMagic工具筛选Kafka Topic中存在指定非空属性的消息时,执行JavaScript查询触发如下报错:
TypeError: Cannot read properties of undefined (reading 'rpo_info') at (Script:3:57)
使用的过滤语句为:
return (Context.Message.content.operation_info.rpo_info.rpo_info.source_bar_code != null);
报错原因
报错提示无法读取undefined的rpo_info属性,说明链式访问的属性层级中,Context.Message.content.operation_info 或 operation_info.rpo_info 可能不存在(值为undefined),直接链式访问会触发类型错误,并非仅因source_bar_code不存在导致。
解决方法
方法1:使用可选链操作符(推荐)
通过?.操作符自动处理中间层级不存在的情况,避免报错:
return (Context.Message.content?.operation_info?.rpo_info?.rpo_info?.source_bar_code != null);
如果中间任意层级不存在,表达式会直接返回undefined,最终判断结果为false,过滤掉属性不完整的消息。
方法2:逐层做存在性检查(兼容旧环境)
如果环境不支持可选链,可手动逐层判断每个层级是否存在:
const content = Context.Message.content; // 逐层检查属性层级是否存在 if (!content || !content.operation_info || !content.operation_info.rpo_info || !content.operation_info.rpo_info.rpo_info) { return false; } // 最后判断目标属性是否非空 return content.operation_info.rpo_info.rpo_info.source_bar_code != null;
效果说明
两种方法都会跳过属性层级不完整的消息,仅保留拥有完整content -> operation_info -> rpo_info -> rpo_info层级且source_bar_code非空的消息,同时避免触发类型错误。
内容的提问来源于stack exchange,提问作者Ilya
相关产品推荐
相关产品推荐

