全局连接已存在。首先调用sql.close()

时间:2017-08-06 21:57:43

标签: sql-server node.js

我正在尝试构建一个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

有任何解决问题的建议吗?

1 个答案:

答案 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();
            });