sqlite3查询salt返回[object Object]而非字符串的问题排查
问题原因及解决办法
你看到salt的值为[object Object]的核心原因是:错误地将db.get()方法的返回值直接赋值给了salt。在node-sqlite3库中,db.get()的返回值并不是查询到的数据,而是数据库连接对象本身,所以输出时会显示为[object Object]。
具体细节:
- node-sqlite3的默认API是异步回调风格,
db.get()不会同步返回查询结果,必须通过回调函数来获取数据。你当前的写法没有处理异步逻辑,直接拿方法调用的返回值,自然拿到的是数据库对象而非查询结果。 - 存入代码是正确的,
db.run()已经将字符串类型的salt正确写入数据库,问题仅出在查询阶段的API使用错误。
正确写法示例:
回调风格:
db.get(`SELECT salt FROM users WHERE username = ?`, [username], (err, row) => { if (err) { console.error(err); return; } if (row) { const salt = row.salt; // 这里才是数据库中存储的字符串salt // 执行后续逻辑 } else { console.log('未找到对应用户'); } });
Promise风格(需包装API):
如果习惯用async/await,可以用util.promisify将回调风格的API转为Promise风格:
const { promisify } = require('util'); // 包装db.get并绑定上下文 const getAsync = promisify(db.get).bind(db); async function fetchUserSalt(username) { try { const row = await getAsync(`SELECT salt FROM users WHERE username = ?`, [username]); const salt = row?.salt; // 执行后续逻辑 } catch (err) { console.error(err); } }
内容的提问来源于stack exchange,提问作者BHughes
相关产品推荐
相关产品推荐

