Discord.js等级系统代码无法写入数据库,请求错误排查
Discord.js等级系统数据存储问题
问题描述
我正在基于Discord.js开发等级系统,编写了如下代码用于将用户的经验值数据存入数据库,但数据始终无法成功存储。预期代码能根据用户ID判断,对数据库中的用户经验值进行更新或新增存储,但实际未达到预期效果。
代码片段
client.on('messageCreate', async message => { if (message.author.bot) return; const userId = message.author.id; const username = `${message.author.username}#${message.author.discriminator}`; const xpToAdd = 5; try { const [rows] = await db.promise().query('SELECT * FROM user_levels WHERE userid = ?', [userId]); if (rows.length > 0) { const newXp = rows[0].xp + xpToAdd; await db.promise().query('UPDATE user_levels SET xp = ?, username = ? WHERE userid = ?', [newXp, username, userId]); } else { await db.promise().query('INSERT INTO user_levels (userid, username, xp) VALUES (?, ?, ?)', [userId, username, xpToAdd]); } } catch (error) { console.error('There was an error processing the message:', error); } });
常见排查方向
- 确认数据库连接状态:检查
db对象是否已正确初始化并建立有效连接 - 验证表结构:确保
user_levels表存在,且userid、username、xp字段类型与代码数据匹配(比如userid需支持字符串存储) - 查看详细错误:在catch块中打印
error.stack获取更完整的报错信息 - 测试SQL语句:直接在数据库客户端执行对应的SELECT/UPDATE/INSERT语句,验证是否能正常操作数据
- 检查异步逻辑:确认
db.promise().query确实返回Promise,且await关键字正确使用
内容的提问来源于stack exchange,提问作者Boaz Weerd
相关产品推荐
相关产品推荐

