0

私は Bookshelf を試していて、それがどのように機能するかを学ぶための小さなプログラムを作成しました。

残念ながら、Knex は初期化されていないと不平を言っているため、実際には機能していないようです。

Bookshelf バージョン 0.3.1 と Knex バージョン 0.2.6 を使用しています。

簡単なテスト プログラムを実行すると、次のエラーが表示されます。

/home/joachimp/tmp/ks/db/node_modules/knex/knex.js:20
      throw new Error('Knex インスタンスはまだ初期化されていません。');
            ^
エラー: Knex インスタンスはまだ初期化されていません。
    Knex (/home/joachimp/tmp/ks/db/node_modules/knex/knex.js:20:13)
    _.extend.builder (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:384:14) で
    クエリで (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:1294:35)
    _.extend.query (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:379:14) で
    新しい Bookshelf.Sync (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:823:26)
    _.extend.sync (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:389:14) で
    _.extend.save (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:263:24) で
    オブジェクトで。(/home/joachimp/tmp/ks/db/dbtest.js:20:6)
    Module._compile で (module.js:456:26)
    Object.Module._extensions..js で (module.js:474:10)

プログラムは次のとおりです。

var Bookshelf = require('bookshelf');

Bookshelf.Initialize('sqlite3', {
    client: 'sqlite3',
    connection: {
        filename : './dbtest.sqlite3'
    }
});

var TestModel = Bookshelf.Model.extend({
    tableName: 'TestModel',

    initialize: function() {
    },

    name: 'foo'
});

var test = new TestModel;
test.save();    // <- Line 20

console.log('All done');

ドキュメントは不足しており、例はさらに不足しています。または、私はすでにそれを理解しているかもしれません。

また、コレクションを作成してモデル インスタンスを配置し、insertメソッドで同期オブジェクトを使用しようとしました。Knex が初期化されていないという結果はすべて同じです。

私は何が欠けていますか?Knex を個別に初期化する必要がありますか? そして(はい、それがトピックから外れていることは知っています)簡単な例やチュートリアルから学ぶことはありますか?

4

1 に答える 1

1

したがって、これは一種の悪い設計上の決定でした。クライアントの初期化コードをラップする「Knex」に try/catch ブロックがあるため、間違った名前を使用する以外にクライアントに関連のないエラーが発生し、沈黙します。

使用している sqlite3 クライアントに何か問題があると思いますが、これは最新バージョンで修正されています。次のコードを使用して、最新の Bookshelf 0.5.1 と Knex 0.4.3 で試してください。

var Bookshelf = require('bookshelf');

var bookshelf = Bookshelf.initialize({
    client: 'sqlite3',
    connection: {
        filename : './dbtest.sqlite3'
    }
});

var TestModel = bookshelf.Model.extend({
    tableName: 'TestModel',

    initialize: function() {
    },

    name: 'foo'
});

var test = new TestModel;
test.save();    // <- Line 20

console.log('All done');

例については、すぐにまとめたいと思っています... そうでない場合は、統合テストのコードを見るのが最善の策です。

于 2013-09-22T04:37:45.623 に答える