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
相关产品推荐
相关产品推荐

