看起來,使用knex.js的一種非常好的方式是創建遷移來定義模式,然後在正常的node.js代碼中插入到所述模式中。knex.js可以在沒有遷移/播種的情況下使用嗎?這個knex.js代碼有什麼問題嗎?
有沒有辦法不使用遷移?我可以使用正常的node.js代碼中的knex.schema.createTable(...)
函數嗎?有沒有這方面的文件?
編輯:我原本寫這個問題,因爲我認爲我不能執行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
}
};
而摩卡/柴測試,我寫道:
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);
});
});
});
當然。只要數據庫存在,就可以實現它(無論是在knex中遷移,在liquibase中遷移,在任何任何東西中執行任務)。 – ssube