繁体   English   中英

节点js:mssql [ConnectionError:连接已关闭。]名称:'ConnectionError',消息:'Connection已关闭。',代码:'ECONNCLOSED'

[英]Node js: mssql [ConnectionError: Connection is closed.] name: 'ConnectionError', message: 'Connection is closed.', code: 'ECONNCLOSED'

我在使用sqlserver 2012的npm mssql 3.0.0中遇到错误

我正在创建单页应用程序,在这里我使用express使用了restful。 执行查询并将数据返回响应的方法有4种。 对于每种方法,我都会打开连接并关闭连接。

但是当savequery调用时,会发生连接关闭错误。

每个方法代码都类似于savequery方法(复制粘贴的代码仅更改查询),但是它们正在执行savequery没有执行

{[ConnectionError:连接已关闭。]名称:'ConnectionError',消息:'Connection已关闭。,代码:'ECONNCLOSED'}

var savedquery=function(req,res){
       dbConfig= {
                user: 'XXX',
                password: 'XXXXXXXXXX',
                server: 'localhost', // You can use 'localhost\\instance' to connect to named instance 
                database: 'DEMO_ODS',       
                options: {
                    encrypt: true
                }
            };

        sql.connect(dbConfig).then(function (err) {
                var sqlrequest = new sql.Request();
                sqlrequest.query("SELECT * from SavedQuery").then(function (recordset) {
                    sql.close(function (value) {
                      console.log("connection6 closed");
                    });
                    return res.status(200).send(recordset);

                }).catch(function (err) {
                    console.log(err);
                });
            }).catch(function (err) { 
                console.log(err);
            });
        };
}

我知道这是一个古老的问题,但这是针对其他面临相同问题的人的。 我遇到了同样的问题,我所做的是,使用了如下承诺。

    function getData() {
    try {
        sqlInstance.connect(setUp)
            .then(function () {
                // Function to retrieve all the data - Start
                new sqlInstance.Request()
                    .query("select * from Course")
                    .then(function (dbData) {
                        if (dbData == null || dbData.length === 0)
                            return;
                        console.dir('All the courses');
                        console.dir(dbData);
                    })
                    .catch(function (error) {
                        console.dir(error);
                    });

                // Function to retrieve all the data - End

                // To retrieve specicfic data - Start
                var value = 1;
                new sqlInstance.Request()
                    .input("param", sqlInstance.Int, value)
                    .query("select * from Course where CourseID = @param")
                    .then(function (dbData) {
                        if (dbData == null || dbData.length === 0)
                            return;
                        console.dir('Course with ID = 1');
                        console.dir(dbData);
                    })
                    .catch(function (error) {
                        console.dir(error);
                    });
                // To retrieve specicfic data - End

            }).catch(function (error) {
                console.dir(error);
            });
    } catch (error) {
        console.dir(error);
    }
}

这解决了我的问题。 您可以在此处找到修复程序。

你应该删除

        options: {
            encrypt: true
        }

从您的dbConfig

我只是使用promise处理并发请求:

const executeQuery = function (res, query, dbName) {

    dbConfig = {
        user: "********",
        password: "********",
        server: "*******",
        database: dbName
    }

    sql.connect(dbConfig).then(pool => {

        return pool.request().query(query)

    }).then(result => {

        res.send(result);

        }).catch(err => {

            res.send(err);


    });
}

希望能帮助到某人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM