2

node-postgres の API ドキュメントを読みました。

pgオブジェクトを使用してプールされたクライアントを作成することをお勧めします。そして、pg.connectAPIドキュメントでは次のように述べています:

connect メソッドはクライアント プールから Client を取得します。または、プールされたすべてのクライアントがビジーでプールがいっぱいでない場合、connect メソッドは新しいクライアントを作成し、その最初の引数を Client コンストラクターに直接渡します。

推奨事項によると、使用は「オブジェクトを使用してプールされたクライアントを作成pg.connectする」ことを意味しますか? pgそうでない場合、それは実際にはどういう意味ですか?

私の実装例では、ルートでいくつかのクエリを作成しました。

app.get('/post', function(req, res) {
  pg.connect(dbconfig, function(err, client, done) {
    client.query('SELECT * FROM post', function(err, result) {
      res.render('post/list', { posts: result.rows });
    });
  });
});

app.get('/post/new', function(req, res) {
  res.render('post/new');
});

app.post('/api/v1/post', function(req, res) {
  var b = req.body;
  pg.connect(dbconfig, function(err, client, done) {
    client.query('INSERT INTO post (title, content) VALUES ($1, $2)', 
      [b.title, b.content], 
      function(err, result) {
        done();
        res.redirect('/post');
    });
  });
});

pg.connectクエリを作成するたびに呼び出すのは正しい方法ですか? そうでない場合、より良いアイデアは何ですか?

4

2 に答える 2

0

これは少し古いかもしれませんが、これを見てください: https://github.com/aichholzer/Bodega

どんな心配事も解決し、あなたのコーディング体験をより快適なものにしてくれます。:)

于 2014-08-16T08:53:36.037 に答える
0

pg.connect() がプールされた接続を処理するというドキュメントによると、それは見えます。ただし、もっとうまくできる可能性が高いことを 1 つお勧めします (アプリが使用している資格情報のセットが 1 つしかないと仮定します)。

これを行うことを検討している場合は、労力/キーストローク/エラーの機会の重複を少し節約することに取り組み、クライアントを返すために使用できる何らかの関数で pg.connect() をラップすることを検討します。これにより、次のようなことができるようになります。

app.get('/post', function(req, res) {
  db.run( function(client) {
    client.query('SELECT * FROM post', function(err, result) {
      res.render('post/list', { posts: result.rows });
    });
  });
});

ただし、あなたのやり方を考えると、そのようなアプローチによって得られるものがたくさんあるとは思えないので、あなたのアプローチに問題はないと思います。

于 2013-11-08T02:15:21.790 に答える