首页 > 解决方案 > 如何修复“同一连接的重复数据库对象”dynamodb 警告

问题描述

我有一个使用 nodejs 和 dynamoDB 运行的 lambda,我可以在 cloudwatch 中看到以下日志,我不确定如何解决这个问题?

undefined WARN WARNING: Creating a duplicate database object for the same connection.

lambda 中的代码使用以下内容

const dynamoDbClient = new DynamoDb(config.dynamoDb, logger);


interface dynamoDB {
{
  region: string;
  endpoint?: string;
  accessKeyId?: string;
  secretAccessKey?: string;
  convertEmptyValues?: boolean;
}

下面包含查询 dynamodb 并使用连接的代码

new AWS.DynamoDB.DocumentClient(this.config).put(..)

标签: node.jsaws-lambdaamazon-dynamodb

解决方案


我的猜测是你没有检查你是否已经有一个连接,所以我的 MySQL 类看起来像这样:

export default class MySQL {
  constructor() {
    this.connection = null;
  }

  to() {

    return promise.then((data) => {
        return [null, data]
    }).catch(err => [err])
  }

  async getConnection() {
    if (this.connection === null || this.connection.state === 'disconnected') {
      return this.createConnection();
    }

    return this.connection;
  }

  async createConnection() {
    this.connection = await mysql.createConnection({
      host: 'dbhost',
      user: 'user',
      password: 'password',
      database: 'db',
    });


    return this.connection;
  }

  async query(sql, params) {
    await this.getConnection();

    let err;
    let rows;
    [err, rows] = await this.to(this.connection.query(sql, params));

    if (err) {
      console.log(err);
      return false;
    }

    return rows;
  }
}

所以在查询时,它会检查它是否是一个重用的 lambda 容器,如果不是则创建一个连接。


推荐阅读