Knex在哪里不允许将单个字符串传递给`.where()`

时间:2017-11-02 01:28:48

标签: javascript node.js sqlite typescript knex.js

我在使用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));

给出预期的输出。

1 个答案:

答案 0 :(得分:3)

事实证明问题出在where(),在我更仔细地检查堆栈跟踪之前我没有看到。用.where("idx > 0")替换.where("idx", ">", 0)修复它。