Node.js Discord bot调用Google Calendar API出现delete属性未定义报错
错误根因
报错TypeError: Cannot read property 'delete' of undefined指向代码中calendar.events.delete这一行,说明你传入execute方法的calendar对象上不存在events属性,访问未定义属性的delete方法就会抛出该错误。
排查解决步骤
- 核对参数传递顺序
你提到结构相似的insert命令可以正常运行,首先对比两个命令的execute方法参数定义,以及你调用execute时的传参顺序,你当前delete命令的参数顺序是async execute(message, args, calendarId, calendar, mongoose),确认调用时是否把calendar的位置传错(比如和mongoose、calendarId的顺序搞反),或者漏传了calendar参数。
- 核对参数传递顺序
- 校验calendar实例有效性
如果你使用的是Google Calendar API,正常初始化后的实例一定存在events属性,你可以在调用删除方法前添加打印代码确认实例状态:
- 校验calendar实例有效性
console.log('传入的calendar实例:', calendar)
如果打印结果没有events字段,说明你传入的是未完成初始化的calendar对象,需要回到实例初始化的代码排查问题。
- 补充空值校验避免同类报错
你当前的代码缺少空值判断,存在多处潜在崩溃风险,建议补充校验逻辑:
- 补充空值校验避免同类报错
// 补充事件查询结果空校验 const nameData = await Event.find({ name: nazwa }) if (!nameData.length) return message.channel.send('**你输入的事件名称不存在!**'); // 补充calendar实例校验 if (!calendar?.events) return message.channel.send('**服务异常,请稍后重试!**');
- 确认方法名适配
如果你使用的不是Google官方的calendar SDK,确认对应库的删除方法名,部分库会用del/remove代替delete(因为delete是JS保留关键字)。
- 确认方法名适配
内容的提问来源于stack exchange,提问作者Vectror
相关产品推荐
相关产品推荐

