プロジェクトにNodeJS、Express、MySQLを使用していますが、Bookshelf ORMを使用したいと考えています。
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があり、Promiseを返すsequelize.authenticate()
を提供し、( http://docs.sequelizejs.com/en/latest/api/sequelize/#authenticate-promise )
_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}
_のような生のクエリを実行し、その出力を使用してサーバーを起動するかどうかを決定することです。このソリューションは十分ですか?
これについては、今週初めにknex
の課題追跡で説明しました。 https://github.com/tgriesser/knex/issues/1886
クエリを行うことは、データベースに接続できることを確認するための良い方法です。クエリが作成されない場合、プールは初期接続を作成する必要はありません(プール設定に依存)。
また、プールのafterCreate
コールバックを接続して、データベースに新しい接続が確立されたときに通知することもできます( https://github.com/knex/documentation/pull/17/files =)。