0

以下の 2 つのモデルがあるとします。

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 はどのように動作しますか?

皆さん、ありがとうございました!

4

1 に答える 1

1

Bookshelf.js は内部で Knex.js を使用するため、質問に対する答えは、Knex が接続を処理する方法にあります。

Knex は、 generic-pool-reduxライブラリの接続プーリングを使用できます。デフォルトでは 2 つのオープン接続があり、postgres および mysql データベースの場合は最大 10 で、sqlite の場合は 1 つの接続です。

これは、デフォルト値を変更する構成ファイルの例です。

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

そして、彼は fetchAll のブックシェルフ ドキュメントの一部です。

モデルに現在設定されている任意のクエリ パラメータを使用して選択クエリを作成し、データベースからモデルのコレクションをフェッチします。

したがって、単一の Knex クエリを形成し、1 つの接続のみを使用して実行します。

構成ファイルに応じて、プールから利用可能なすべてまたはすべてに対して単一の接続が使用されます。

クエリの実行に使用する接続を変更できるオプションがありますが、そのためには bookshelf query()メソッドを呼び出して Knex クエリ ビルダーを直接利用する必要があります。

于 2015-04-28T13:06:08.947 に答える