无法保存Bookshelf模型实例

时间:2013-09-19 13:50:58

标签: node.js bookshelf.js knex.js

我正在试验Bookshelf,并制作了一个小程序来了解它是如何工作的。

不幸的是,它似乎并没有真正起作用,因为Knex抱怨它还没有被初始化。

我正在使用Bookshelf版本0.3.1和Knex版本0.2.6。

当我运行我的简单测试程序时,我收到以下错误:

/home/joachimp/tmp/ks/db/node_modules/knex/knex.js:20
      throw new Error('The Knex instance has not been initialized yet.');
            ^
Error: The Knex instance has not been initialized yet.
    at Knex (/home/joachimp/tmp/ks/db/node_modules/knex/knex.js:20:13)
    at _.extend.builder (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:384:14)
    at query (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:1294:35)
    at _.extend.query (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:379:14)
    at new Bookshelf.Sync (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:823:26)
    at _.extend.sync (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:389:14)
    at _.extend.save (/home/joachimp/tmp/ks/db/node_modules/bookshelf/bookshelf.js:263:24)
    at Object. (/home/joachimp/tmp/ks/db/dbtest.js:20:6)
    at Module._compile (module.js:456:26)
    at 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?并且(是的,我知道这是偏离主题的)是否有任何简单的示例或教程可供学习?

1 个答案:

答案 0 :(得分:1)

所以这是一个糟糕的设计决定,“Knex”中有一个try / catch块包装客户端初始化代码,因此除了使用错误的名称之外,客户端出现了无关的错误,它会被静音。 / p>

我猜你正在使用的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');

至于例子,我希望很快就能把它们放在一起......否则,看看集成测试中的代码将是你最好的选择。