我正在构建一个连接到sql server进行查询的node.js应用程序!该应用程序分为Router-Controller-Model和一个名为 DatabaseConfig.js 的文件,用于继续数据库的配置参数。
当我在模型中运行查询时,会调用以下错误:
Global connection already exists. Call sql.close() first. at Object.connect (/Users/myuser/Desktop/myapp/src/ServerJS/ServerJS/node_modules/mssql/lib/base.js:1591:31)*
如何解决此类错误?
型号:
async function CaricaRisorseCantiere(IdCantiere) {
var data=[];
const query = "select IdRisorseUmane,IdUtenteInserimento,u1.Nome+' '+u1.Cognome as InseritoDA,ExtraPreventivo,u2.Nome+' '+u2.Cognome as Risorsa,RisorseUmane.IdUtente,IdCantiere,CONVERT(VARCHAR(10), Data, 105) as Data,Descrizione,convert(varchar(5), OreInizio, 108) as OreInizio,convert(varchar(5), OreFine, 108) as OreFine,REPLACE(Pausa, '.', ':') as Pausa,convert(varchar(5), Cast(convert(varchar(5), (OreFine - OreInizio), 108) as datetime) - CAST(REPLACE(Pausa, '.', ':') as datetime), 108) as TotaleOre from RisorseUmane inner join Utente as u1 on u1.IdUtente = RisorseUmane.IdUtenteInserimento inner join Utente as u2 on u2.IdUtente = RisorseUmane.IdUtente where IdCantiere= @IdCantiere order by convert(datetime, Data, 103) desc";
const pool = new sql.ConnectionPool(DbConfigJSON);
pool.connect().then(() => {
const request = new sql.Request(pool);
request.input('IdCantiere', sql.Int, IdCantiere);
request.query(query).then((result) => {
for(var i=0; i<result.recordset.length; i++){
data.push({
IdRisorseUmane: result.recordset[i].IdRisorseUmane,
IdUtenteInserimento: result.recordset[i].IdUtenteInserimento,
InseritoDA: result.recordset[i].InseritoDA,
ExtraPreventivo: result.recordset[i].ExtraPreventivo,
Risorsa: result.recordset[i].Risorsa,
Data: result.recordset[i].Data,
Descrizione: result.recordset[i].Descrizione,
TotaleOre: result.recordset[i].TotaleOre
});
}
return data;
});
}).catch(err =>{
console.log("Errore: ",err);
});
}
DatabaseConfig.js
exports.config = {
user: 'remote',
password: 'xx',
server: 'xx',
database: 'xx',
debug: false,
port: 1433,
options: {
encrypt: false
},
pool: {
max: 30,
min: 0,
idleTimeoutMillis: 30000
}
};
答案 0 :(得分:1)
我将在这里添加一个简单的连接池使用示例:
const DbConfig = require('./DatabaseConfig.json');
const sql = require('mssql');
const query = 'select * from people';
const pool = new sql.ConnectionPool(DbConfig);
pool.connect().then(() => {
const request = new sql.Request(pool);
request.query(query).then ((result) => {
console.log('Query result: ', JSON.stringify(result));
});
}).catch ((error) => {
console.error('An error occurred connecting to the db: ', error);
});
这假设一个名为“people”的表,您可以根据需要重命名。
DatabaseConfig.json文件如下所示:
{
"user": "some_user",
"password": "pw",
"server": "db_Server",
"database": "test_db",
"port": 1433
}
这是另一个例子,从函数返回结果(按要求):
const DbConfig = require('./DatabaseConfig.json');
const sql = require('mssql');
const query = 'select * from people';
const pool = new sql.ConnectionPool(DbConfig);
async function testQuery() {
await pool.connect();
const request = new sql.Request(pool);
const result = await request.query(query);
return result;
};
testQuery().then ((result) => {
console.log('Result: ', JSON.stringify(result));
});