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() 调用?
每次需要新连接时,您都会创建新池,尽管池最终被 GCed,连接仍然打开,除非您手动调用.close()它。您真正应该做的是拥有一个池,它将为您管理连接生命周期:
import mysql from 'mysql2/promise';
const pool = mysql.createPool(params);
const getConnection = () => pool.getConnection();
export { getConnection }
Run Code Online (Sandbox Code Playgroud)