Discord机器人执行命令崩溃:Cannot read properties of null问题排查
问题原因
报错Cannot read properties of null (reading 'data')的核心原因是:当机器人在数据库中找不到当前服务器(interaction.guild.id)的配置记录时,guild_settings.findOne()会返回null,此时直接访问findLang.data就会触发空值读取错误。
解决方案
1. 紧急修复:添加空值判断
修改代码,先检查findLang是否存在,再读取语言配置,同时保留默认语言en的 fallback:
const guild_settings = require('../database/models/guild-settings.js'); const findLang = await guild_settings.findOne({ guild: interaction.guild.id }); // 用可选链操作符规避空值,不存在则用默认语言en const langCode = findLang?.data?.language || "en"; const lang = require(`../langs/${langCode}.js`);
这里的**可选链操作符?.**会在findLang或findLang.data为null/undefined时直接返回undefined,进而触发后面的默认值"en",避免报错。
2. 彻底优化:自动初始化服务器配置
为了从根源解决问题,可以在找不到对应服务器配置时,自动创建一条带默认语言的配置记录:
const guild_settings = require('../database/models/guild-settings.js'); let findLang = await guild_settings.findOne({ guild: interaction.guild.id }); // 无配置时自动创建默认记录 if (!findLang) { findLang = await guild_settings.create({ guild: interaction.guild.id, data: { language: "en" } }); } const lang = require(`../langs/${findLang.data.language}.js`);
这样后续执行命令时,就不会再出现findLang为null的情况。
内容的提问来源于stack exchange,提问作者Space Logic C
相关产品推荐
相关产品推荐

