我正在使用nodejs + mysql2在proyect中工作,有时我收到错误“连接太多”。
我的联系:
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实例。
您只应打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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句