javascript - 如何使用 node.js 和连接池一次建立多个连接到 SQLServer 数据库?
问题描述
我正在使用池连接构建带有 SQLServer 数据库的 node.js 应用程序。它具有异步功能,每个完成后都应将一条记录保存到数据库中。问题是仅插入了来自 10 个异步任务的大约 10 条记录,其余的则给出此错误“已连接到数据库!在连接到不同的数据库之前调用关闭。”。
我试图编辑池的配置,但在风向标。
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。让客户自动处理。
推荐阅读
- angular - Angular 12 aws-sdk 2.910.0 错误:找不到模块:错误:无法解析 '.\.\.\node_modules\aws-sdk\lib' 中的 'util'
- r - 汇集来自插补的结果以获得具有边际效应的回归
- jquery - 数组中的总和值不起作用 - jQuery
- python - Selenium 使用 python 将网站值保存在变量中
- php - laravel 与 where 子句进行预测
- amazon-web-services - 有没有办法在 AWS DMS Task 上使用表达式来动态过滤日期列?
- go - 根据 Bazel 的 Godror 构建,使用 rules_go 和 CGO 从您的应用程序或服务访问 Oracle
- javascript - 根据元素之间的关系从数组中删除元素
- javascript - 在反应钩子中设置 setState
- xslt - XSLT:覆盖 fn:generate-id 函数以使用 Saxon 创建可预测的结果