discord.js调用mongoose提交数据的代码为何无法正常运行?
问题原因
你的代码存在4个核心错误,导致无法正常提交数据:
- 错误访问不存在的属性:discord.js的消息对象中,
msg.content本身就是存储消息文本的字符串,不存在msg.content.text这个嵌套属性,运行到这一行会直接抛出类型错误,中断后续逻辑。 - 字符串截取长度硬编码错误:你定义的触发字符串
!reg ign:算上末尾的空格总长度为10,使用substr(9)截取的内容开头会多带一个冒号后的空格,拿到的昵称值不符合预期。 - 指令匹配逻辑不严谨:使用
includes()判断触发条件,只要消息任意位置包含!reg ign:就会触发提交,即使用户不是在发指令,只是聊天内容里带了这段字符串也会误触发。 - 异步逻辑处理错误:
user.save()是异步数据库操作,你没有等待操作完成就直接发送提交成功的回复,哪怕数据库连接失败、数据写入报错,用户也会收到提交成功的错误提示,另外回复里的单词存在拼写错误(submited应为submitted)。
修正后代码
const subregis = "!reg ign: "; client.on("message", async msg => { // 排除机器人自身消息避免循环触发,判断消息是否以指令前缀开头 if (msg.author.bot || !msg.content.startsWith(subregis)) return; try { const user = new User({ _id: mongoose.Types.ObjectId(), userID: msg.author.id, // 直接匹配前缀长度做截取,同时去掉用户输入的前后多余空格 Nickname: msg.content.substr(subregis.length).trim() }); await user.save(); msg.reply("Data already submitted"); } catch (err) { console.log(err); msg.reply("Data submit failed, please try again later"); } })
额外注意:运行前请确认你已经正确完成MongoDB连接初始化、
User模型定义和mongoose导入,否则代码依然无法正常运行。
内容的提问来源于stack exchange,提问作者Nevada
相关产品推荐
相关产品推荐

