問題は構成上の問題であり、本棚の問題ではないと思います。あなたの最善のアプローチは、ノードで環境変数を使用してデータベース接続文字列を保存することです。アイデアは、実際のコードベースから分離された異なる環境(dev、testing、stage、prodなど)に固有の設定を持つことです。ノードには環境変数を使用する方法がたくさんあるので、それらのすべてには触れません。良いもののいくつかはdotenvとnode-foremanです。私たちは主に英雄を扱うので、node-foremanを使用します。 gitにチェックインされていない設定オプションを含む.envファイルがあります。鉱山は次のようになりますので、ノード職長は、JSON .envファイルをサポートしています。
{
"DATABASE_URL": "postgres://user:[email protected]:port/schema",
"LOG_LEVEL": "DEBUG"
}
それはこれ以上を含めることができますが、あなたのアイデアを得ます。さまざまな環境(つまり、.env.dev、.env.test、.env.stageなど)用に複数の.envファイルを用意しています。繰り返しますが、私はノード-職長を使用するので、私はデフォルトで.envファイルを使用していますnf start
でこれを起動しますが、そのように-eフラグを使用することができます。nf -e .env.test start
次に、あなたのアプリでprocess.env
でこの設定にアクセスします。次に、db.jsを持つことができます:
const dbOptions = {client: 'postgres', connection: process.env.DATABASE_URL};
const knex = require('knex')(dbOptions);
const bookshelf = require('bookshelf')(knex);
module.exports = {
knex,
bookshelf,
}
このファイルは、モデルファイルに必要な場所に必要です。あなたのapp.jsで、その後
const bookshelf = require('./db').bookshelf;
const User = bookshelf
.Model
.extend({
tableName: 'user'
});
module.exports = {
User,
}
(またはあなたがユーザーを照会する必要がある場所):これはusermodel.jsに行くかもしれない
ので
const User = require('./usermodel').User;
User.fetchAll();
、あなたはこれを設定したら、 nf -e .env.whatever
サービスに依存すると、これらのテストはユニットテストではなく「サービス統合テスト」になります。これは別の問題を解決しています。 – Gajus
環境変数を設定するためにdotenvまたはforemanを使用する必要はありません。それだけで簡単になります。依存関係なくそれをしたいですか?次のコマンドを実行します。 DATABASE_URL = "postgres://ユーザー:パス@ホスト:ポート/スキーマ" npm start – ricka