2017-02-01 8 views
5

私は自分のプロジェクトにNodeJS、Express、MySQLを使用しており、Bookshelf ORMを使用したいと考えています。nodejsでKnex接続を保証する方法

Bookshelfはクエリ、モデリングにKnexを使用し、Knex(http://bookshelfjs.org/#installation)を使用してDB接続をセットアップすることを提案します。

Knexとの正常なDB接続の確立に問題があります。私はDB接続が成功した場合にのみサーバーを起動したいが、そうするために接続を確立した後に何も提供していないように思える。

これは私が使用しているコードです。

import _knex from "knex"; // npm install knex --save 
import _bookshelf from "bookshelf"; // npm install bookshelf --save 

let knex = _knex({ 
    client: "mysql", 
    connection: { 
     host: "127.0.0.1", 
     database: process.env.DB, 
     user: process.env.DB_USERNAME, 
     password: process.env.DB_PASSWORD 
    }, 
    debug: true 
}); 

let bookshelf = _bookshelf(knex); 

module.exports.knex = knex; 
module.exports.bookshelf = bookshelf; 

詳細参照:ありSequelizeという名前の別のORMがあり、それは約束を返し、(http://docs.sequelizejs.com/en/latest/api/sequelize/#authenticate-promise)として使用することができsequelize.authenticate()を提供

sequelize.authenticate() 
    .then(() => { 
     console.log("Db successfully connected"); 
     app.listen(port,() => console.log(`App started at: ${port}`)); 
    }) 
    .catch(err => console.log('Unable to connect to the database')); 

私は考えることができる唯一の解決策は、実行することですUSE {DB_NAME}のような生のクエリを使用して、その出力を使用してサーバーを起動するかどうかを決定します。このソリューションは十分ですか?

答えて

4

これは、今週初めにknex issue trackerで議論されました。 https://github.com/tgriesser/knex/issues/1886

データベースへの接続を確認するには、クエリを作成することをお勧めします。クエリが作成されない場合、プールは初期接続を作成する必要はありません(プール設定に依存します)。

また、データベースに新しい接続(https://github.com/knex/documentation/pull/17/files)が作成されたときに通知するために、プールのafterCreateコールバックを接続することもできます。

関連する問題