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

PostgreSQL查询返回[object Object]而非字符串问题求助(Node.js+Discord.js开发场景)

问题分析

你遇到的[object Object]问题,本质是因为res.rows[0]是一个对象(比如结构是{ user_id: "你的用户ID数字字符串" }),当你直接把它放进模板字符串里时,JavaScript会自动调用对象的toString()方法,而默认的toString()返回的就是[object Object]——这就是为什么控制台能正常展开显示对象内容,但Discord消息里只会输出这个奇怪的字符串。

解决方案

你需要直接访问对象里的user_id属性,而不是直接输出整个对象。这里有两种稳妥的写法:

方法1:直接访问属性(推荐用于正式场景)

修改发送消息的代码,从查询结果对象中取出user_id字段:

module.exports = new Command({ 
  name: "id", 
  description: "Gets an id", 
  async run(message, args, client){
    try{
      const res = await pool.query('SELECT user_id FROM levels WHERE guild_id = $1 AND user_id = $2', [message.guild.id, message.author.id])
      console.log(res.rows[0]) // 在控制台中可正常返回查询结果
      
      // 先判断是否查到了记录,避免数组越界报错
      if (res.rows.length === 0) {
        return message.channel.send("没有找到你的用户ID记录哦~")
      }
      
      const result = res.rows[0]
      message.channel.send(`${result.user_id}`) // 直接取出user_id属性值
    }catch(e){
      console.log(e)
      message.channel.send("查询出错啦,请稍后再试~")
    }
  }
})

方法2:用JSON.stringify查看完整结构(仅调试用)

如果你想确认返回的对象具体结构,可以用JSON.stringify()把对象转成JSON字符串,方便调试:

message.channel.send(JSON.stringify(result))

这样会输出类似{"user_id":"1234567890"}的内容,但这只是调试手段,正式场景还是建议用方法1直接取出目标字段。

额外提醒

最好加上res.rows.length的判断逻辑,避免用户没有对应记录时,res.rows[0]为undefined导致后续访问属性报错,上面的代码已经包含了这个判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:07:42