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

使用better-sqlite3时如何处理查询行不存在的报错?

错误原因

better-sqlite3的get()方法在没有匹配到查询条件的行时,会返回undefined。你的代码没有对返回结果做判空处理,直接链式读取.businessType属性,就会触发「读取未定义对象的属性」类错误,导致脚本直接崩溃。
另外原代码直接将author.id拼接入SQL语句,存在SQL注入风险,建议优先使用参数化查询。

修复方案

全版本兼容写法

// 预编译SQL,使用参数占位符避免注入风险
const queryStmt = DB.prepare('SELECT businessType FROM Profiles WHERE userId = ?');
// 传入参数执行查询
const result = queryStmt.get(author.id);

let businessType;
if (result) {
  businessType = result.businessType;
} else {
  businessType = '用户不存在';
}

简化语法写法(ES2020及以上环境支持)

可以结合可选链运算符?.和空值合并运算符??实现一行完成逻辑:

const businessType = DB.prepare('SELECT businessType FROM Profiles WHERE userId = ?')
  .get(author.id)
  ?.businessType ?? '用户不存在';
  • 可选链?.会在查询结果为undefined时直接终止属性读取,不会抛出错误
  • 空值合并??会在左侧值为undefined/null时,返回右侧的自定义默认提示

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:15:06