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

时间:2017-04-11 11:52:42

标签: node.js

您好我正在使用sqlserver数据库创建节点js restful api,我准备使用api时我正在使用api输出以json格式显示,同时刷新浏览器获取其显示"错误:全局连接已存在。首先调用sql.close()。"错误。我正在添加代码



var express = require("express");

var sql = require("mssql");
var app = express();

//Initiallising connection string
var dbConfig = {
    user: 'sa',
    password: 'India123',
    server: 'localhost',
    database: 'sample'

  
};

app.get('/login', function (req, res) {

    // connect to your database
    
    var data = {

        "user": ""
    };
    sql.connect(dbConfig, function (err) {

        if (err) console.log(err);

 
        var request = new sql.Request();
   
      
        request.query('select * from Login', function (err, result) {

            if (err) console.log(err)

            // send data as a response
            //res.send(result.recordset);
            data["user"] = result.recordset;
            res.send(data);
          
      
        });
    }); 

});

var server = app.listen(5000, function () {
    console.log('Server is running..');
});



 请更正我的代码。谢谢提前

2 个答案:

答案 0 :(得分:6)

// db.js 
var mssql = require("mssql"); 
var dbConfig = {
    user: 'sa',
    password: 'India123',
    server: 'localhost',
    database: 'sample'   
};

var connection = mssql.connect(dbConfig, function (err) {
    if (err)
        throw err; 
});

module.exports = connection; 

// app.js 
var db = require("db"); 
var express = require("express"); 
var app = express();

app.get('/login', function (req, res, next) {
    var request = new db.Request();
    request.query('select * from Login', function (err, result) {
        if (err) 
            return next(err);

        var data = {};
        data["user"] = result.recordset;
        res.send(data);      
    }); 
}); 

var server = app.listen(5000, function () {
    console.log('Server is running..'); 
});

答案 1 :(得分:5)

不要再使用sql.Connection(),而是使用sql.ConnectionPool()

连接

在内部,每个ConnectionPool实例都是一个单独的TDS连接池。创建新的请求/事务/准备语句后,将从池中获取新的TDS连接并保留用于所需的操作。操作完成后,连接将释放回池中。连接运行状况检查是内置的,因此一旦发现死连接,它将立即替换为新连接。

重要信息:始终将错误侦听器附加到已创建的连接。每当连接出现问题时,它都会发出错误,如果没有监听器,它会使你的应用程序崩溃并发生未被捕获的错误。

创建池并使用连接。

  

const pool = new sql.ConnectionPool({/ * config * /})

     

整篇文章如何使用池和关闭池。

     

https://www.npmjs.com/package/mssql

var sql = require("mssql");

const pool = new sql.ConnectionPool({
    user: 'sa',
    password: 'Pass@123',
    server: 'SAI-PC',
    database: 'Demo'
})


var conn = pool;

conn.connect().then(function () {
    var req = new sql.Request(conn);
    req.query("SELECT * FROM Product").then(function (recordset) {
        console.log(recordset);
        conn.close();
    })
        .catch(function (err) {
            console.log(err);
            conn.close();
        });
})
    .catch(function (err) {
        console.log(err);
    });