2016-08-04 19 views
2

私はNodeJSアプリケーションベースをSQLite上に持っています。私の問題は、DBが起動時に初期化されていないということです。テーブルは作成されませんが、クエリは正常に実行されます(このようなテーブルエラーはありません)。 ここに私のconfig.jsの内容です。このファイルは、データベースが必要なときに呼び出されます。NodeJSとKnex - テーブルが自動的に作成されない

var config = require('../../config'); 
var bcrypt = require('bcrypt-nodejs'); 

var knex = config.knex; 
knex.schema.createTableIfNotExists('users', function(table) { 
    table.increments(); 
    table.string('name', 128); 
    table.string('username', 128); 
    table.string('password'); 
    //table.string('email', 128); 
    //table.string('role').defaultTo('admin');  
    table.timestamps(); 
}); 

//var bookshelf = config.bookshelf; 
var bookshelf = require('bookshelf')(knex); 
bookshelf.plugin('registry'); 

var User = bookshelf.Model.extend({ 
    tableName: 'users', 
    ... 

私はデータを取得または作成する任意のメソッドを呼び出すようにしようとすると、私はテーブルが存在しないというエラーが発生している:

私のuser.jsの中に今
var knex = require('knex')({ 
    client: 'sqlite3', 
    connection: { 
     filename: "db.sqlite" 
    }, 
    useNullAsDefault: true 
}); 

//var bookshelf = require('bookshelf')(knex); 
//bookshelf.plugin('registry'); 

module.exports = { 
    "port": process.env.PORT || 3000, 
    "secretKey": "MyOwnSecretKey", 
    "knex": knex 
    //"bookshelf": bookshelf 
}; 

は、私は次のようにこれを呼び出していますファイル。テーブルの作成部分をserver.jsファイルに移動しましたが、テーブルを作成しませんでした(ただし、デバッグではそれを表示する必要があります)。 ここにキャッチは何ですか?あるいは、これを使ってテーブルを作成するより良い方法がありますか?

答えて

0

knexには奇妙なAPIがあります。 execメソッドと見なすことができるthenメソッドを呼び出さない限り、クエリは実行されません。したがって、移行クエリでthenメソッドを呼び出してみてください。

APIは非同期であり、テーブルをクエリする前にテーブルが作成されるまで待つ必要があることに注意してください。結局のところ、マイグレーションコードをモデルファイルに入れるべきではありません。 knexには、移行ファイルを生成して実行するCLIがあります。

データベースの移行用のフォルダを作成してから、$ knex migrate:make file_name_goes hereコマンドを使用して移行ファイルを作成します。その後、$ knex migrate:latestコマンドを使用して、移行ファイルを実行することができます。

+0

これです、それは動作します。私は実際に最後の提案を得ることはありませんが、私はそれに取り組んでいきます。ありがとう。 – smoczyna

関連する問題