web-dev-qa-db-ja.com

nodejsでKnex接続を確認する方法

プロジェクトに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}_のような生のクエリを実行し、その出力を使用してサーバーを起動するかどうかを決定することです。このソリューションは十分ですか?

9
Raghav Garg

これについては、今週初めにknexの課題追跡で説明しました。 https://github.com/tgriesser/knex/issues/1886

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

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

8
Mikael Lepistö