JS运行报错TypeError:无法读取null的id属性如何解决
报错原因
TypeError: Cannot read properties of null (reading 'id') 代表代码尝试从一个值为null的对象上读取id属性,对应你提供的代码片段,问题出在message.guild.id这行:
- 消息来自私信(DM)场景时,消息不属于任何服务器,
message.guild固定返回null,直接读取id就会触发报错 - 开启了部分结构(partial)缓存配置的bot框架(比如discord.js),事件回调拿到的是不完整的消息对象,未拉取完整结构时
guild属性可能为null - 消息触发回调时已经被删除,关联的服务器属性缓存失效,也会返回null
修复方案
在读取message.guild.id之前提前做空值拦截,有partial配置的场景先拉取完整消息结构,参考修改代码:
const Timeout = new Map(); module.exports = async (client, message, db) => { // 非服务器场景直接终止逻辑 if (!message.guild) return; // 若开启了partial结构支持,先拉取完整消息对象 if (message.partial) await message.fetch(); let checking = db.fetch(`nitroemoji_${message.guild.id}`) if(checking == true) { // 原有后续业务逻辑 } }
额外排查提示
如果修改后仍出现同类报错,直接顺着报错栈定位读取.id属性的代码行,先判断.id所属的父对象是否为null/undefined,再做属性读取即可。
内容的提问来源于stack exchange,提问作者m1ks1k
相关产品推荐
相关产品推荐

