标签: node-pg-pool

Promise.all 中的 Promise 被多次拒绝,到底发生了什么?

Promise.all([iterable])要么全有,要么全无,这意味着当可迭代中的每个 Promise 解析时,它返回的 Promise 都会解析,或者一旦其中一个 Promise 拒绝,它就会拒绝,原因是第一个 Promise 拒绝 ( doc)。

但是如果可迭代拒绝的多个承诺会发生什么?

在 VSCode 中,我尝试了以下示例,并故意使foo()bar()承诺失败。当我在 VSCode 中调试时,我在 * catch(err => Promise.reject('error query bar()'))* 上收到错误,说发生了异常,但我不明白为什么。

我认为这是因为当我调用 Promise.reject 时,Promise.all 已经收到来自 foo 函数的拒绝,该函数也失败了,但不清楚发生了什么。

如果我在调试选项中禁用“未捕获的异常”断点,则异常将不再显示。

这里到底发生了什么?

function foo() {
  return pool.query('insert_test into test (value) values (20)')
    .then(() => client.query('insert into test (value) values (21)'))
    .catch(err => Promise.reject('error query bar()'))
}

function bar() {
  return pool.query('insert_test into test (value) values (20)')
    .then(() => client.query('insert into …
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise node-pg-pool

6
推荐指数
1
解决办法
2702
查看次数

通过模块导出重用 pg-pool

阅读文档后:https : //github.com/brianc/node-pg-pool,我有点担心重用该new Pool()方法。

文档建议我需要像这样放置new Pool()beforeexportsreturn

// db.js
const pool = new Pool();
module.exports = () => { return pool; }
Run Code Online (Sandbox Code Playgroud)

这样我就可以重用,Pool直到idleTimeoutMillisclient.release(),通过使用require()其他文件,例如:

const connect = require('./db')
connect().query(' .... ');  
Run Code Online (Sandbox Code Playgroud)

如果这是正确的,它如何工作的?node.js 是否缓存new Pool(), 因为它不在里面module.exports

postgresql node.js node-postgres node-pg-pool

5
推荐指数
1
解决办法
1964
查看次数

连接 pg.Pool 和基于 GCP IAM 的数据库身份验证

目前,我们的 api(部署在 cloudRun 上)通过传入带有数据库配置以及数据库用户和密码的 pgConfig 来连接到我们的 Postgres 数据库。

例如:

const configObject = {
  host: cloudRunHost,
  user: dbUser,
  password: dbPassword,
  database: dbName
}

async function connect() {
  if(!client) {
    const pgPool = new pg.Pool(configObject);
    await pgPool.connect()
      .then((result) => {
        logger.info('Connected to DB')
        client = result;
      }).catch((err) => {
        logger.error(err);
      });
  }
} 
Run Code Online (Sandbox Code Playgroud)

我们希望应用本身使用Cloud SQL IAM 数据库身份验证连接到数据库

迄今为止:

  1. api cloudRun实例有一个服务帐户
  2. 数据库和 CloudSQL 已配置为基于 IAM 的访问(我们可以使用我们的机器服务帐户进行访问)
  3. api 服务帐户可以通过 IAM 访问数据库,并授予该用户对 Postgres 数据库本身的权限
  4. 当上面的代码运行时,它会记录error: empty password returned by client

我们尝试从 configObject 中完全删除密码行,但没有帮助。关于为什么我的服务帐户可以直接访问数据库但 …

postgresql google-cloud-sql google-cloud-platform google-iam node-pg-pool

0
推荐指数
1
解决办法
951
查看次数