javascript方法链接 - knex.js

时间:2018-05-02 06:02:31

标签: javascript node.js knex.js

我是PHP开发人员,对于一个新项目,我决定使用node.js后端。所以我对此很新。

我使用knex.js来处理数据库连接并操纵数据。 F.ex我有以下问题:

let gastronomies = await knex
  .from('user')
  .innerJoin('profile', 'user.id', 'profile.user_id')
  .where('user.status', 1);

如果客户端将附加变量传递给函数,则应将其用作另一个查询参数

if(args.lat) {
    gastronomies = await knex
    .from('user')
    .innerJoin('profile', 'user.id', 'profile.user_id')
    .where('user.status', 1)
    .where('lat', 'like', args.lat); //there it is
  }

我想链接这些方法,但它根本不起作用。这就是我想出的:

let gastronomies = await knex
  .from('user')
  .select('*', {key: 'user.id'})
  .innerJoin('profile', 'user.id', 'profile.user_id')
  .where('user.status', 1);

if(args.lat)
    gastronomies.where('lat', 'like', args.lat);

但它说美食家并没有一种名为""的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:1)

查看文档 - 您可以使用对象传递多个where子句:

.where({ first_name: 'Test', last_name: 'User' })

http://knexjs.org/#Builder-where

答案 1 :(得分:1)

如果你想链接它,你应该等待async/await,因为它会触发对数据库的调用。 我会这样做的:

const gastronomies = knex // no await here
  .from('user')
  .select('*', {key: 'user.id'})
  .innerJoin('profile', 'user.id', 'profile.user_id')
  .where('user.status', 1);

if(args.lat)
    gastronomies.where('lat', 'like', args.lat);

const response = await gastronomies;

您还可以在此处查看答案:Can I conditionally add a where() clause to my knex query?