切换到mysql.createPool"/>
如何从使用mysql.createConnection切换到mysql.createPool
我对使用nodejs
进行数据库连接的工作方式还很陌生,但是我遇到的数据库连接问题无法正确关闭。我之前在这里已经问过几个问题,似乎每个人都在告诉我使用pool
而不是我一直使用的方式。唯一的问题是,当我在线搜索有关pool
中使用promise-mysql
的信息时,每个人似乎都在使用一种非常简单且通用的方法,但是我正在使用sockets
的复杂应用程序中使用它。因此,我想知道如何才能将使用createConnection()
的旧方法改为使用pool
,以期解决这些连接问题。
每次调用套接字时,它都会建立与数据库的连接,然后在完成后释放它,或者看起来如此。听起来这不是一个非常可扩展的方法,并且使用pool
将有助于并行运行多个查询。
db.js:
import mysql from 'promise-mysql';
import env from '../../../env.config.json';
const db = async (sql, descriptor, serializedParameters = []) => {
return new Promise( async (resolve, reject) => {
try {
const connection = await mysql.createConnection({
host: env.DB.HOST,
user: env.DB.USER,
password: env.DB.PASSWORD,
database: env.DB.NAME,
port: env.DB.PORT
})
if (connection && env.ENV === "development") {
//console.log(/*"There is a connection to the db for: ", descriptor*/);
}
let result;
if(serializedParameters.length > 0) {
result = await connection.query(sql, serializedParameters)
} else result = await connection.query(sql);
connection.end();
resolve(result);
} catch (e) {
console.log("ERROR pool.db: " + e);
reject(e);
};
});
}
export default db;
这是我将如何创建连接以查询数据库的示例
inventory.js:
import db from '../API/db';
export const selectAllFromBuildItems = () => {
return new Promise( async (resolve, reject) => {
try {
const getAllBuildItems = "SELECT * FROM mydb.build_items;"
const response = await db(getAllBuildItems, "AllBuildItems");
resolve(response);
} catch (e) {
console.log("ERROR inventory.selectAllFromBuildItems: " + e);
reject(e);
}
});
};
如何更改代码,以便改用pool
。我可以从我们的应用程序中调用很多不同的查询,因此我不太确定将采用哪种正确的方法。我看到有人说我应该创建一次pool
,然后在整个应用程序中使用它,但是我不知道该去哪里。如果有人对我如何进行此切换有任何建议,那将对我有很大帮助。谢谢!
var pool = mysql.createPool({
host: env.DB.HOST,
user: env.DB.USER,
password: env.DB.PASSWORD,
database: env.DB.NAME,
connectionLimit: 10
});
pool.prototype.releaseConnection = function releaseConnection(connection) {
return this.pool.releaseConnection(connection.connection);
};
function connect() {
return pool.getConnection().then(function(connection) {
return connection
}).catch(function(e) {
console.log("Error Creating Connection");
throw e;
});
}
function selectAllFromBuildItems() {
var sql_query = `SELECT * FROM mydb.build_items`;
return connect().then(function(conn) {
return conn.query(sql_query).then(function(rows) {
pool.releaseConnection(conn);
return rows;
});
}).catch(function(e) {
console.log("ERROR inventory.selectAllFromBuildItems: " + e);
throw e;
});
}
更多推荐
如何从使用mysql.createConnection切换到mysql.createPool
发布评论