You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.07 02:33:29