Knex where 不允许将单个字符串传递到".where()"



我在Node.js中使用Knex和SQLite编写的程序中有以下一行:

await db.table("books")
.innerJoin("items", "items.id", "books.item_id")
.with("idx", db.raw(`instr(items.name, ?) asc`, name))
.where("idx > 0")
.orderBy("idx")
.select()

其中db是通过调用knex(config)创建的变量。然而,函数raw(sql)似乎不起作用,因为它在运行时不断抛出这个错误:

TypeError:不允许使用运算符"undefined"在Formatter.operator(I:\git\server\node_modules\knex\lib\Formatter.js:138:13)

在QueryCompiler_SQLite3.whereBasic(I:\git\server\node_modules\knex\lib\query\compiler.js:525:100)

在QueryCompiler_SQLite3.where(I:\git\server\node_modules\knex\lib\query\compiler.js:314:32)

我做错了什么?

如果相关的话,我是用Typescript编写的,正如您在await中看到的,我使用的是ES6。但是,如果我排除了with(),并且with()拒绝接受不是由raw()创建的内容,则此查询执行良好。

编辑:

如果我测试这个,它表明问题在with()中,而不是在raw():中

console.log("name: " + name);
console.log("db.raw(name): " + db.raw(`instr(items.name, ?) asc`, name));

给出预期的输出。

发现问题出在where()上,直到我更仔细地检查了堆栈跟踪,我才发现问题。用.where("idx", ">", 0)替换.where("idx > 0")修复了它。

相关内容

  • 没有找到相关文章

最新更新