您好我正在使用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..');
});

答案 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 * /})
整篇文章如何使用池和关闭池。
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);
});