我正在尝试构建一个node.js后端,我有一个用户,我应该每次都连接到服务器而不是数据库,请参阅其中一个webservices:
router.get('/CriticalityGraph/:server/:user/:password/:database/', function(req, res, next) {
user = req.params.user;
password = req.params.password;
server = req.params.server;
database = req.params.database;
criticalityState=req.params.criticalityState
// config for your database
var config = {
user: user,
password: password,
server: server,
database:database
};
sql.connect(config, function (err) {
var request = new sql.Request();
request.query("SELECT MachineName, alarmState, criticality FROM MachineTable ORDER BY criticality DESC"
, function (err, recordset) {
if (err) console.log(err);
else {
for(i=0;i<recordset.recordsets.length;i++) {
res.send(recordset.recordsets[i])
}
sql.close();
}
});
});
});
现在我想从2个浏览器同时访问这个Web服务,我正在抛出node.js Global connection already exists. Call sql.close() first
。
有任何解决问题的建议吗?
答案 0 :(得分:0)
使用连接池解决此问题,即使添加sql.close(),我也面临着同样的问题
使用下面的连接池代码来解决此问题。
new sql.ConnectionPool(config).connect().then(pool => {
return pool.request().query("")
}).then(result => {
let rows = result.recordset
res.setHeader('Access-Control-Allow-Origin', '*')
res.status(200).json(rows);
sql.close();
}).catch(err => {
res.status(500).send({ message: "${err}"})
sql.close();
});