我在使用Knex和SQLite编写的Node.js程序中有以下行:
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));
给出预期的输出。
答案 0 :(得分:3)
事实证明问题出在where()
,在我更仔细地检查堆栈跟踪之前我没有看到。用.where("idx > 0")
替换.where("idx", ">", 0)
修复它。