在Bookshelfjs查询之间共享连接

时间:2015-04-27 18:26:55

标签: javascript bookshelf.js

我们假设我有以下两种模式:

var user = Bookshelf.Model.extend({ tableName: 'users' });
var configuration = Bookshelf.Model.extend({ tableName: 'configurations' });

user.fetchAll().then(function(users) {
    configuration.fetchAll().then(function(configurations) {
        // Do something...
    });
});

有人知道fetchAll()来电是否共享已打开的连接?或者也许每个数据库调用都使用特定的连接?如果他们不共享,有没有办法指定使用相同的连接,直到我关闭操作或什么? BookshelfJS在这件事上的表现如何?

谢谢大家!

1 个答案:

答案 0 :(得分:1)

Bookshelf.js使用了Knex.js,所以问题的答案在于Knex如何处理连接。

Knex可以使用generic-pool-redux库中的连接池。它有一个默认的2开放连接,最多10个用于postgres和mysql数据库,一个连接用于sqlite。

这是用于更改默认值的配置文件的示例。

development: {
    client: 'postgresql',
    connection: {
        database: 'db',
        user:     'username',
        password: 'mypassword',
        charset : 'utf8'
    },
    pool: {
        min: 5,
        max: 20
    },
    migrations: {
        tableName: 'migrations'
    }
}

他是fetchAll的书架文档的一部分

  

使用当前在模型上设置的任何查询参数从数据库中获取模型集合以形成选择查询

因此它将形成单个Knex查询并执行它只消耗一个连接。

根据您的配置文件,它将为池中的所有内容或任何可用内容使用单个连接。

有一个option允许您更改用于执行查询的连接,但为此您必须调用书架query()方法直接点击Knex查询构建器。