2013-09-19 2 views
0

Я экспериментирую с книжной полкой и сделал небольшую программу, чтобы узнать, как она работает.Не удается сохранить экземпляр экземпляра книжной полки

К сожалению, похоже, что это действительно не работает, поскольку Кнекс жалуется, что он не был инициализирован.

Я использую Книжную полку версии 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

Итак, это было плохое дизайнерское решение, в «Knex» есть блок try/catch, который завершает инициализацию кода клиента, поэтому с клиентом существует некорректная ошибка, отличная от неправильного имени, она отключается.

Я предполагаю, что что-то не так с клиентом sqlite3, который вы используете, это было исправлено в последней версии. Попробуйте с последней книжной полке 0.5.1 и 0.4.3 Knex с этим кодом:

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'); 

Что касается примеров, я надеюсь получить один скоро вместе ... в противном случае, глядя на код в интеграции тесты были бы вашим лучшим выбором.

Смежные вопросы