使用Discord销售机器人stock命令时遇TypeError报错求助
错误原因分析
- 触发
TypeError: Cannot read properties of undefined (reading 'length')的直接原因是:db.all()返回的部分数据项中,item.data.conta属性未定义(可能是添加商品时未正确初始化conta字段,或数据被意外篡改),导致尝试读取length属性时抛出异常。 - 现有代码仅通过
db.all().length == 0判断数据库为空,但无法处理数据库有数据但部分数据结构不完整的场景。
解决方案
1. 紧急修复:安全访问属性
修改代码中生成商品列表的行,使用可选链操作符(?.)和空值合并运算符(??),确保属性不存在时不会报错,返回默认库存数0:
const itens = db.all().map(item => `ID: ${item.ID} | QUANTIDADE: ${item.data?.conta?.length ?? 0}`)
?.:如果左侧属性不存在,直接返回undefined,避免抛出异常;??:仅当左侧为undefined或null时,返回右侧的默认值0,比原代码的||更严谨(不会把合法的0库存误判为"0"字符串)。
2. 根源修复:规范数据初始化
检查你的add命令代码,确保每次添加新商品时,都正确初始化conta为数组(即使初始库存为空),示例:
// 假设add命令中添加商品的逻辑 db.set(商品ID, { conta: [] }) // 确保conta字段始终是数组类型
这样能从根源避免数据库中出现结构不完整的数据。
内容的提问来源于stack exchange,提问作者chinaidinho59
相关产品推荐
相关产品推荐

