npm mysql2:使用 Promise 和连接池时连接过多

ddi*_*ert 2 javascript mysql node.js mysql2 es6-promise

使用 mysql2/promise 模块,我创建一个像这样的连接池:

import mysql from 'mysql2/promise';

async function getConnection() {
    let pool = await mysql.createPool({
        connectionLimit: 10,
        host:'localhost',
        user: 'root',
        database: 'customers'
    });

    return pool.getConnection();
}

export  {
    getConnection
};
Run Code Online (Sandbox Code Playgroud)

在另一个文件中,我可以像这样访问此功能:

import {getConnection} from '../config/database/mysql';

async function getCustomerAddresses(id){
    let conn = await getConnection();

    let [rows, fields] = await conn.execute(
        `SELECT *
        FROM addresses WHERE customer = ?`, [id]);

    conn.release();

    return rows;
}
Run Code Online (Sandbox Code Playgroud)

调用该函数几次后,我收到以下错误:

太多联系

我究竟做错了什么?有没有一种更优雅的方法,这样我就不必在每个函数中都包含 getConnection() 调用?

And*_*rov 5

每次需要新连接时,您都会创建新池,尽管池最终被 GCed,连接仍然打开,除非您手动调用.close()它。您真正应该做的是拥有一个池,它将为您管理连接生命周期:

import mysql from 'mysql2/promise';

const pool = mysql.createPool(params);  
const getConnection = () => pool.getConnection();
export { getConnection } 
Run Code Online (Sandbox Code Playgroud)