2016-07-15 13 views
0

knex.jsを使用する一般的な方法は、移行を作成してスキーマを定義し、通常のnode.jsコードでスキーマに挿入することです。knex.jsは移行/シードなしで使用できますか?このknex.jsコードに問題がありますか?

移行を使用しない方法はありますか?通常のnode.jsコードからknex.schema.createTable(...)関数を使用できますか?このようなことに関する文書はありますか?

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 
    } 
}; 

そして、私が書いたモカ/チャイ試験:

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

DBが存在する限り、必要に応じて(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); 
}); 

は、それはあなたのアプリケーションに依存します。

関連する問題