【问题标题】:Too many connections Nodejs + mysql2/promise连接太多 Nodejs + mysql2/promise
【发布时间】:2021-04-25 01:18:43
【问题描述】:

我在一个使用 nodejs + mysql2 的项目中工作,有时我收到错误 Too many connections

我的连接:

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;
}

控制器:

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
        });
    }
}

所以,我的问题是我必须使用 createConnection 而不是 createPool 或者我只需要创建一个我的 conn 实例。

【问题讨论】:

  • 你应用调用connect()多少次?它应该只调用一次(看起来你正在为每个请求调用它),并从池中选择一个连接。
  • 我为每个请求调用 connect(),所以我只需要为每个控制器调用一次 connect(),还是为每个控制器调用一次?。请给我一些例子。

标签: mysql node.js typescript mysql2 node-mysql2


【解决方案1】:

您应该只调用一次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;
}

【讨论】:

  • 感谢您的解释!
猜你喜欢
  • 2023-01-11
  • 1970-01-01
  • 2021-06-09
  • 1970-01-01
  • 2019-11-17
  • 1970-01-01
  • 1970-01-01
  • 2017-06-18
  • 2018-02-24
相关资源
最近更新 更多