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

discord.js中mongoose查询返回nickname为undefined的问题

问题根源

返回nickname is undefined是两个代码逻辑错误导致的:

  • Mongoose所有数据查询方法都是异步执行,直接调用User.findOne()返回的是处于Pending状态的Promise对象,不是实际的查询结果文档,自然读不到nickname属性
  • 空值判断顺序错误:你是先尝试取data.nickname,再判断data是否存在,就算查询无结果也会先执行取值逻辑,直接触发undefined问题
修复代码

给消息事件回调加上async标记,用await等待查询结果返回后再执行后续逻辑,同时调整空值判断的顺序:

client.on("message", async msg => {
  if (msg.content === "!n"){
      // 等待数据库查询返回实际文档数据
      const data = await User.findOne({ userID: msg.author.id })
      // 先判断是否查到对应数据,再读取字段
      if (!data) return msg.reply({content: 'You have no data'})
      const nick = data.nickname;
      msg.reply({content: `Your nickname is ${nick}`})
  }
});

额外优化提示:Schema定义里不需要手动声明_id: mongoose.Schema.Types.ObjectId,Mongoose会默认给每个文档自动生成该类型的_id字段,手动声明反而容易在新增用户数据时因为漏传_id触发校验报错。

内容的提问来源于stack exchange,提问作者Nevada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 15:12:25