2017-05-23 15 views
0

を開始する(db.jsのNode.js:<a href="https://github.com/brianc/node-postgres" rel="nofollow noreferrer">example</a>あたりようpg.Pool()

const pg = require('pg'); 

const client_config = {...}; 

const pool = new pg.Pool(client_config); 

pool.on('error', function(err, client) { 
    console.error('idle client error', err.mesae, err.stack); 
}); 

module.exports.query = function(text, values, callback) { 
    return pool.query(text, values, callback); 
}; 

module.exports.connect = function(callback) { 
    return pool.connect(callback); 
}; 

内にを発現する(生成)アプリケーション、私が必要/プールを開始しなければなりませんの(db.js)私のapp.js /アプリのスタートアップで、または私のデータモデル内にdb.jsが必要ですか?直感的に私は、複数のイニシエーションを避けるためにルートへの各接続ではなく、起動時にプールを開始しますが、私はかなり新しいですNode.js

答えて

1

もう少しスクロールしてください - 使用例があります。

この理由は、Nodeのモジュールキャッシングのおかげです。初めてdb.jsが必要な場合は、すべてのinitコードがすぐに実行されます。その後のrequire呼び出しは、既に初期化されたモジュールをキャッシュから戻し、そのプールはすでに接続されています。 Expressでは、app.set('db', db);を使用してモジュールをExpressアプリケーションに接続することで、db.jsをその場で使用する必要がなくなります。その後、ルートコードにreq.app.get('db').query(...)を呼び出すことができます。

データニーズがモデルを複雑にするほど複雑な場合は、pgがドライバ(JavaをやったことがあればJDBCと思う)のほうが高いので、より高レベルのデータアクセスライブラリを調べることができます。最低スケールのデータマッパー(私はMassiveJSを維持しています)からビルダー(Knex)をフルスケールのORM(Sequelize)にクエリするまで、さまざまなオプションがあります。

+0

Expressはノード初心者のために呪いと祝福であることが判明しました。それはすべて「うん、ちょうど生成して行こう」ですが、私にとっては、基本原則の多くをあいまいにしています。私は例を読みましたが、1回限りの警告について混乱しました。今度は、モジュールシステムと輸出機能に飛び込みましょう!ありがとうございました! BTW私はMassiveJSを見ていましたが、少し前にSequelizeを始めましたが、最初にpgで作業し、低レベルのDBデータを最小限に抑えてスケーラブルな構造を設定することを決めました。その後、すぐに美しいものを見たい人もいます適切なバックエンドの時間になります) – ThingumaBob

関連する問題

 関連する問題