首页 > 解决方案 > 在未定义中绑定时 Knex 抛出错误

问题描述

我正在使用Nodejs 版本 12.14.1Knex 版本 0.20.8

Knex文档中,他们告诉在 where 查询中绑定未定义 knex 是否会引发错误。有没有办法忽略或绕过它?

我尝试"useNullAsDefault": true,在我的 knex 文件中使用参数,但它没有帮助

SQL 示例

knex('accounts')
  .where('login', undefined)
  .select()
  .toSQL()

错误

编译 SELECT 时检测到未定义的绑定。未定义的列:[login] 查询:select * from accountswhere login= ?

标签: javascriptnode.jsknex.js

解决方案


您可以发送一个函数作为 的参数where,您可以检查您的变量是否未定义,这样您就不会生成where没有要比较的值的 a:

let login = undefined

knex('accounts')
  .where((builder) => {
    if (login) {
      builder.where('login', login)
    }  
  })
  .select()
  .toSQL()

如果loginundefined,则 sql 将是:

select *

如果你设置login = 'test',则 sql 将是:

select * where ("login" = ?)

具有test价值bindings


推荐阅读