[解決済み] node.jsのpostgresqlモジュールの正しい使い方を教えてください。
質問
Herokuでnode.jsのアプリを書いています。 pgモジュール . 私は、データベースへのクエリが必要な各リクエストのクライアントオブジェクトを取得するための"right"方法を見つけ出すことができません。
ドキュメントでは、このようなコードを使用しています。
pg.connect(conString, function(err, client) {
// Use the client to do things here
});
しかし、きっとあなたは
pg.connect
を呼び出す必要はないのではないでしょうか?私が見たのは
他のコード
というのを見たことがあります。
var conString = process.env.DATABASE_URL || "tcp://postgres:1234@localhost/postgres";
var client = new pg.Client(conString);
client.connect();
// client is a global so you can use it anywhere now
Herokuの無料のデータベースインスタンスは、いずれにせよ1つの接続に制限されていると思うので、私は2番目のオプションに傾いていますが、この方法で行うことに何か欠点はありますか?クライアントオブジェクトがまだ接続されているかどうかを使用する前に毎回確認する必要がありますか?
どのように解決するのですか?
私は ノードポストグレス . まず、ドキュメントが正しいオプションを明確にすることに失敗したことをお詫びします:それは私の責任です。 私の責任です。私が書いた a Gist というのは、このことを説明するために、たった今 会話 が長くなりすぎたためです。
<ブロッククオート
使用方法
pg.connect
は
である。
であり、ウェブ環境では
PostgreSQLサーバは、1回の接続で1つのクエリしか処理できません。
つまり、もしあなたが1つのグローバルな
new pg.Client()
が接続されている場合
バックエンドに接続されたグローバルなpg.connect
を設定します。
pg.defaults.poolSize
をまともなものに設定します (私たちは 25-100 としました。
を設定します。)
new pg.Client
は、自分が何をやっているのか分かっているときのためにあります。 何らかの理由で
何らかの理由で単一の長寿命のクライアントが必要な場合、またはライフサイクルを非常に慎重に制御する必要がある場合です。
ライフサイクルを非常に注意深く制御する必要がある場合です。 この良い例が
LISTEN/NOTIFY
. リスニングクライアントが必要なのは
を適切に扱えるようにするために、共有されていない
NOTIFY
メッセージを適切に処理できるようにするためです。
他の例としては、1-off クライアントを開いてハングアップしたものを削除するときや、 コマンドラインスクリプトの場合などがあります。
ハングしたものを殺すために 1 回限りのクライアントを開くとき、またはコマンド ライン スクリプトで。
非常に役立つことの1つは、アプリ内のデータベースへのアクセスをすべて1つのファイルに集中させることです。 散らかさないように
pg.connect
の呼び出しや新しいクライアントを散在させないことです。以下のようなファイルを用意します。
db.js
のようなファイルがあり、それは次のようなものです。
module.exports = {
query: function(text, values, cb) {
pg.connect(function(err, client, done) {
client.query(text, values, function(err, result) {
done();
cb(err, result);
})
});
}
}
こうすることで、実装を
pg.connect
からクライアントのカスタムプールなどに実装を変更し、一箇所で変更するだけでよいのです。
を見てみましょう。 node-pg-queryモジュール を見てください。
関連
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] npm installの-saveオプションは何ですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] モバイル端末の検出にはどのような方法がありますか?
-
[解決済み] Node.jsのmodule.exportsの目的と使い方を教えてください。
-
[解決済み】JavaScript版sleep()とは?)
-
[解決済み] react-routerのハッシュフラグメントからクエリパラメータを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] javascript の関数から `undefined` と `null` のどちらを返すのが良いのでしょうか?
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] Reactコンポーネントでthis.setStateを複数回使用するとどうなりますか?
-
[解決済み] jQueryの$という記号の意味は何ですか?
-
[解決済み] サブドメインにまたがってlocalStorageを使用する
-
[解決済み] 文字列とラベルのローカライズとグローバリゼーションのベストプラクティス【終了しました
-
[解決済み] javascriptでオプションのパラメータを扱う
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
-
[解決済み] JavaScriptのArray.sort()メソッドでシャッフルするのは正しいのか?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行