[英]How to make multiple connections at once to a SQLServer database by using node.js and connection pooling?
我正在使用池连接使用SQLServer数据库构建node.js应用程序。 它有异步功能,每个记录完成后都应该将一条记录保存到数据库中。 问题是只插入10个异步任务的大约10条记录,其余的给出此错误“已经连接到数据库!在连接到不同的数据库之前调用close。”。
我试图编辑池的配置但是在风向标中。
var config = {
host: "localhost",
user: "test",
password: "test",
database: "testDB",
server: '************',
pool: {
max: 20,
maxWaitingClients:1,
fifo:true,
min: 0,
idleTimeoutMillis: 30000
}
};
const pool = new sql.ConnectionPool(config);
pool.on('error', err => {
console.error('SQLServer Pool Error: ', err.toString());
});
async writeToDB(System, url, PortListening, RequestTest, time, TestType, Request, Response, responseTime, pool) {
try {
var query = "INSERT INTO `testTable` " +
"(SystemName,URL,PortListening,RequestTest,TestDate,TestType,Request,Response,ResponseTime) " +
"VALUES " +
"('" + System + "','" + url + "','" + PortListening + "','" + RequestTest + "','" + time + "','" + TestType + "',N'" + Request + "',N'" + Response + "'," + responseTime + ")";
await pool.connect();
let result =await pool.request().query(query);
return {success: result};
} catch (err) {
console.log(System);
console.error(err);
return {err: err};
} finally {
pool.close();
}
}
它应该插入所有异步任务中的所有行,而不会丢失任何数据。
从池设置中省略maxWaitingClients。 让客户自动照顾它。
我找到了答案。 我应该在应用程序启动时打开池“pool.connect()”,然后在应用程序关闭之前关闭它。 所以代码应该是这样的:
var config = {
host: "localhost",
user: "test",
password: "test",
database: "testDB",
server: '************',
pool: {
max: 20,
maxWaitingClients:1,
fifo:true,
min: 0,
idleTimeoutMillis: 30000
}
};
const pool = new sql.ConnectionPool(config);
pool.on('error', err => {
console.error('SQLServer Pool Error: ', err.toString());
});
pool.connect();
async writeToDB(System, url, PortListening, RequestTest, time, TestType, Request, Response, responseTime, pool) {
try {
var query = "INSERT INTO `testTable` " +
"(SystemName,URL,PortListening,RequestTest,TestDate,TestType,Request,Response,ResponseTime) " +
"VALUES " +
"('" + System + "','" + url + "','" + PortListening + "','" + RequestTest + "','" + time + "','" + TestType + "',N'" + Request + "',N'" + Response + "'," + responseTime + ")";
let result =await pool.request().query(query);
} catch (err) {
return {err: err};
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.