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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 11:57:41