mysql - Nodejs + mysql2/promise 连接太多

标签 mysql node.js typescript mysql2 node-mysql2

我正在使用 nodejs + mysql2 的项目中工作,有时我收到错误 连接太多 .
我的连接:

import {createPool, Pool} from 'mysql2/promise';

export async function connect(): Promise < any > {
  const connection: Pool = await createPool({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '',
    database: 'mendozarq',
    connectionLimit: 10
  });
  return connection;
}
Controller :
import { Response, Request } from 'express';
import { FieldPacket, Pool } from 'mysql2/promise';

import { connect } from './../../classes/database';
import { Personal } from './../../models/personal.interface';

export const getAllPersonal = async (req: Request, res: Response) => {
    try {
        const conn: Pool = await connect();

        const [personal]: [any[], FieldPacket[]] = await conn.query('SELECT * FROM personal ORDER BY creadoEn DESC');
        conn.end();

        return res.status(200).json(personal);

    } catch (error) {
        return res.status(400).json({
            error
        });
    }
}
所以,我的问题是我必须使用 创建连接 而不是 创建池 或者我只需要创建一个我的 conn 实例。

最佳答案

你应该只调用 createPool一次,然后每次从池中选择。
所以,它应该看起来像这样。创建一个存储池的常量。然后在函数中如果池已经存在则返回池而不调用 createPool .如果不存在,则调用 createPool并返回已经创建的池。

import {createPool, Pool} from 'mysql2/promise';

const globalPool: Pool | undefined = undefined;

export async function connect(): Promise <Pool> {

  // If the pool was already created, return it instead of creating a new one.
  if(globalPool) {
    return globalPool;
  }

  // If we have gotten this far, the pool doesn't exist, so lets create one.
  globalPool = await createPool({
    host: 'localhost',
    port: 3306,
    user: 'root',
    password: '',
    database: 'mendozarq',
    connectionLimit: 10
  });
  return globalPool;
}

关于mysql - Nodejs + mysql2/promise 连接太多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65813552/

相关文章:

javascript - 在 Angular2 中获取带有附加事件绑定(bind)的元素

mysql - 删除 hive 直线中的重复 header

php - 如何确认http post请求是否已在flutter中发布?

php - 识别存储在 MySQL 中的重复标题和/或 URL(RSS 文章)

mysql - 寻找具有 Sequelize 关联的 friend

javascript - 在 Digital Ocean 上启动 Node.js 服务器

mysql - 来自 2 个表的不同计数

node.js - 在 Node.js 中解析巨大的日志文件 - 逐行读取

javascript - Vue.js 变量变为未定义

javascript - 无法在 Visual Studio 2013 中编译 .d.ts TypeScript 文件