如何正确使用 knex.js 查询生成器及其 .first() 方法

ver*_*isu 1 node.js express knex.js

我的 knex 遇到了一些麻烦。

我收到一条错误消息

Cannot chain .first() on "first" query
Run Code Online (Sandbox Code Playgroud)

目前,我的控制器使用以下代码调用存储库中的函数:

exports.findByEmail = async (email) => {
    return knex
        .where({email: email})
        .first();
}
Run Code Online (Sandbox Code Playgroud)

该代码第一次工作,获取正确的信息,但在连续调用时,会抛出上述错误。

我的 knex 已经用一张桌子实例化了。

我已经尝试过这种方法,将 then 链接到后面,但仍然得到相同的结果。https://github.com/knex/knex/issues/1355

exports.findByEmail = async (email) => {
    return knex
        .where({email: email})
        .first()
        .then(row => row);
}
Run Code Online (Sandbox Code Playgroud)

我是这样称呼它的:

let user = await CustomerRepo.findByEmail(req.body.email)
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?谢谢

ver*_*isu 5

我已经知道我做错了什么了。这就是我实例化它的方式。

我像这样实例化了 knex:

const knexQB = require('knex')
const knex = knexQB(config)('table_name');
Run Code Online (Sandbox Code Playgroud)

并像上面那样称呼它

return knex.where().first();
Run Code Online (Sandbox Code Playgroud)

但这是错误的,因为我必须像这样实例化每个查询的 knex

return knex('table_name').where().first();
Run Code Online (Sandbox Code Playgroud)

我无法为整个类实例化它,因为 knex 的查询似乎不仅仅在返回结果后停止查询。

你懂得越多!再次感谢。