我正在试验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?并且(是的,我知道这是偏离主题的)是否有任何简单的示例或教程可供学习?
答案 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');
至于例子,我希望很快就能把它们放在一起......否则,看看集成测试中的代码将是你最好的选择。