2016-07-15 10 views
0

Канонический способ использования knex.js, похоже, заключается в создании миграций для определения схемы, а затем вставки в указанную схему в обычный код node.js.Может ли knex.js использоваться без миграции/посева? Что-то не так с этим кодом knex.js?

Есть ли способ не использовать миграции? Могу ли я использовать функцию knex.schema.createTable(...) из обычного кода node.js? Есть ли какая-либо документация по этому поводу?

EDIT: Я изначально написал этот вопрос, потому что думал, что не могу выполнить функции knex.schema.createTable(...) из моей обычной базы кода. Теперь кажется, что я не могу нормально использовать knex из любого кода. Если я использую миграции для создания схемы для базы данных SQLite3, она работает, но я никогда не могу вставлять или запрашивать данные, в миграциях или иным образом.

Мои Миграции файл:

exports.up = function(knex, Promise) { 
    return Promise.all([ 
     knex.schema.createTableIfNotExists('test', function(table){ 
      console.log("creating user table"); 
      table.increments('id'); 
      table.text('test'); 
     }) 
    ]); 
}; 

exports.down = function(knex, Promise) { 
    return Promise.all([ 
     knex.schema.dropTableIfExists('test') 
    ]); 
}; 

knexfile.js:

module.exports = { 
    development: { 
     client:  "sqlite3", 
     connection: { 
      filename: "devel.db" 
     }, 
     useNullAsDefault: true 
    }, 
    deployment: { 
     client:  "sqlite3", 
     connection: { 
      filename: "deploy.db" 
     }, 
     useNullAsDefault: true 
    } 
}; 

и А/тест мокко Chai я написал:

const chai  = require("chai"); 
var knex  = require("knex")({ client: "sqlite3", connection: { filename: "devel.db" }, useNullAsDefault: true }); 

var expect  = chai.expect; 

// The tests. 
describe("db",()=> { 
    it("Simple connect, query, and destroy.",()=> { 
     knex('test').insert({ test: 'wow' }) 
     .catch(function(e){ 
      console.error(e); 
     }); 
    }); 
}); 
+0

Несомненно. Вы можете сделать это, как вы хотите (миграции в knex, миграции в Liquibase, задачи в недоступном, что угодно), пока существует база данных. – ssube

ответ

0

Ваш миграционный работает правильно. В вашем тесте вам нужно вернуть объект knex для его выполнения.

describe("db",()=> { 
    it("Simple connect, query, and destroy.",()=> { 
    return knex('test').insert({ test: 'wow' }) 
     .catch(function(e){ 
     console.error(e); 
     }); 
    }); 
}); 

В ответ на фактический вопрос, да, вы можете. Код похож на код миграции, но затем() или catch() необходимо вызвать для его выполнения. Тип документации Knex охватывает это, но это не так понятно. Вот пример изменения схемы вне миграции файла:

knex.schema.table('test', function (table) { 
    table.string('foo'); 
    table.string('baa'); 
}) 
.catch(function(err) { 
    console.log(err); 
}); 

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

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