【问题标题】:What is the difference between pool.query and client.query with the Node pg library?使用 Node pg 库的 pool.query 和 client.query 有什么区别?
【发布时间】:2019-05-29 04:06:54
【问题描述】:

我试图了解pool.queryclient.query 以及两者之间的区别以及何时使用哪个。

我有一个快速应用程序,它在某个端点运行以下代码。

// I am just using params for to a quick setup
router.get("/:username/:password", (req, res) => {
  const { username, password } = req.params;
  // crypt & gen_salt function from pgcrypto
  client // *** here ***
    .query(
      ` SELECT username, email, password FROM users 
        WHERE users.username = $1
        AND users.password = crypt($2, password)
      `, [username, password]
    )
    .then(user => {
      console.log("Users ==>", user.rows);
      const userCount = user.rows.length;
      if (userCount < 1) {
        res.status(204).json({ userFound: "No User Found" });
      } else {
        res.status(200).json(user.rows[0]);
      }
    })
    .catch(err => console.log(err));
});
// index.js (starting point of application)
require("dotenv").config({ debug: true });
const app = require("./middleware");


// Port Listener
app.listen(process.env.PORT, () =>
  console.log(
    "Server running on PORT <======= " + process.env.PORT + " =======>"
  )
);

我点击了 API 端点,两种方式都返回了完全相同的结果,我已经读到使用池而不是实例化一个新的客户端实例更好,但老实说,我不确定这是否是真的,因为 Node 应该保留相同的客户端实例,因为它的导出方式超出了我当前的知识库。我在这个主题上找到的阅读材料很少,所以如果有人有任何他们会推荐的文章,那么我也很乐意去看看。

【问题讨论】:

    标签: node.js postgresql express client connection-pooling


    【解决方案1】:

    我相信两者都是一样的。但是pool.query 将允许您在需要从客户端执行时执行一个基本的单个查询,该客户端将从客户端线程池中访问。

    所以pool.query 可用于直接运行查询,而不是获取客户端然后使用该客户端运行查询。

    从池中获取客户

    const { Pool } = require('pg')
    
    const pool = new Pool()
    
    pool.connect((err, client, release) => {
      if (err) {
        return console.error('Error acquiring client', err.stack)
      }
      client.query('SELECT NOW()', (err, result) => { // Default client query which is same as that used when connect to DB with one client.
        release()
        if (err) {
          return console.error('Error executing query', err.stack)
        }
        console.log(result.rows)
      })
    })
    

    除无池外同上

    const { Client } = require('pg').Client
    const client = new Client()
    client.connect()
    client.query('SELECT NOW()', (err, res) => {
      if (err) throw err
      console.log(res)
      client.end()
    })
    

    直接在池上调用查询

    const { Pool } = require('pg')
    
    const pool = new Pool()
    
    // Direct query without acquiring client object.
    pool.query('SELECT $1::text as name', ['brianc'], (err, result) => {
      if (err) {
        return console.error('Error executing query', err.stack)
      }
      console.log(result.rows[0].name) // brianc
    })
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-28
    • 1970-01-01
    • 2018-07-08
    • 2013-12-02
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多