Node.js Nodejs MSSQL如何同时池化多个数据库

Node.js Nodejs MSSQL如何同时池化多个数据库,node.js,sql-server,express,Node.js,Sql Server,Express,我正在使用NodeJS构建一个庞大的内部网,从ASP.NETC#转换而来。我经常遇到数据库错误,例如在连接关闭或连接必须打开时无法使用连接等。我正在尝试转换为连接池,但遇到了问题,因为我正在连接(当前)6个不同的数据库,并且是节点MSSQL的新手,我有点不知如何继续 最初,我调用“runquerys()”传递配置数据,然后从那里打开到所需数据库的连接。连接详细信息存储在database.js文件中的JSON对象中。我现在尝试在database.js文件中创建池,并将其作为要连接的对象返回 //d

我正在使用NodeJS构建一个庞大的内部网,从ASP.NETC#转换而来。我经常遇到数据库错误,例如在连接关闭或连接必须打开时无法使用连接等。我正在尝试转换为连接池,但遇到了问题,因为我正在连接(当前)6个不同的数据库,并且是节点MSSQL的新手,我有点不知如何继续

最初,我调用“runquerys()”传递配置数据,然后从那里打开到所需数据库的连接。连接详细信息存储在database.js文件中的JSON对象中。我现在尝试在database.js文件中创建池,并将其作为要连接的对象返回

//database.js
const sql = require('mssql');

// const Config = {
//     MCAIntranet: {
//         user: 'username',
//         password: 'password',
//         server: 'mcasql',
//         database: 'MCAIntranet',
//         options: { enableArithAbort: true }
//     },
//     DEV_Intranet: {
//         server: 'mcasql',
//         user: 'username',
//         password: 'password',
//         database: 'DEV_Intranet_Test',
//         options: { enableArithAbort: true }
//     },
//     CMR: {
//         user: 'username',
//         password: 'password',
//         server: 'mcasql',
//         database: 'Corporate_Morning_Reports',
//         options: { enableArithAbort: true }
//     },
//     Lansa: {
//         user: 'username',
//         password: 'password',
//         server: 'mcasql',
//         database: 'LANSA',
//         options: { enableArithAbort: true }
//     },
//     Roles: {
//         user: 'username',
//         password: 'password',
//         server: 'mcasql',
//         database: 'dotNetRolesDB_New',
//         options: { enableArithAbort: true }
//     },
//     PreAuth:{
//         user: 'username',
//         password: 'password',
//         server: 'mcasql',
//         database: 'PreAuth',
//         options: { enableArithAbort: true }
//     }
// }



const CORPIntranet = () => {
    new sql.ConnectionPool({
        user: 'username',
        password: 'password',
        server: 'dbserver',
        database: 'CORPIntranet',
        options: { enableArithAbort: true }
    })
    .connect().then(pool => pool)
};

const DEV_Intranet = () => {
    new sql.ConnectionPool({
        user: 'username',
        password: 'password',
        server: 'dbserver',
        database: 'CORPIntranet_Test',
        options: { enableArithAbort: true }
    })
    .connect().then(pool => pool)
};

const CMR = () => {
    new sql.ConnectionPool({
        user: 'username',
        password: 'password',
        server: 'dbserver',
        database: 'Corporate_Morning_Reports',
        options: { enableArithAbort: true }
    })
    .connect().then(pool => pool)
};

const Lansa = () => {
    new sql.ConnectionPool({
        user: 'username',
        password: 'password',
        server: 'dbserver',
        database: 'LANSA',
        options: { enableArithAbort: true }
    })
    .connect().then(pool => pool)
};

const Roles = () => {
    new sql.ConnectionPool({
        user: 'username',
        password: 'password',
        server: 'dbserver',
        database: 'dotNetRolesDB_New',
        options: { enableArithAbort: true }
    })
    .connect().then(pool => pool)
};

const PreAuth = () => {
    new sql.ConnectionPool({
        user: 'username',
        password: 'password',
        server: 'dbserver',
        database: 'PreAuth',
        options: { enableArithAbort: true }
    })
    .connect().then(pool => pool)
};

const Config = {
    CORPIntranet: CORPIntranet(),
    DEV_Intranet: DEV_Intranet(),
    CMR: CMR(),
    Lansa: Lansa(),
    Roles: Roles(),
    PreAuth: PreAuth()
}

module.exports = Config;
我使用代码wait dataQuery.runQuery(query,config.PreAuth)调用它

runquery()代码是

我知道最后不需要“sql.close()”,但我正在转换过程中。我现在得到一个类型错误:database.query不是一个函数

若你们能指出我的错在哪里,更好的是链接一个好的教程,假设读者是新手,那个就太好了

提前谢谢

编辑 在runQuery()函数中,我将代码更改为

      let pool=await database();
      let recordset = await pool.query(query);
现在允许运行查询。但这是正确的方法吗?它能防止多个数据库连接上的错误吗

      let pool=await database();
      let recordset = await pool.query(query);