首页 > 解决方案 > 如何使用 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();
         }
    }

它应该插入来自所有异步任务的所有行,而不会丢失任何数据。

标签: javascriptnode.jssql-serverconnection-pooling

解决方案


从池设置中省略 maxWaitingClients。让客户自动处理。


推荐阅读