Node js: mssql [ConnectionError: Connection is closed.] name: 'ConnectionError', message: 'Connection is closed.', code: 'ECONNCLOSED'
Node js: mssql [ConnectionError: Connection is closed.] name: 'ConnectionError', message: 'Connection is closed.', code: 'ECONNCLOSED'
我在使用 sqlserver 2012 的 npm mssql 3.0.0 中遇到错误
我正在创建单页应用程序,其中我使用 restful 使用 express 。
有 4 种方法执行查询并将数据返回给响应。
对于每种方法,我打开连接并关闭连接。
但是在调用 savedquery 时发生连接关闭错误。
每个方法代码都类似于 savedquery 方法(复制粘贴代码只更改查询)但它们正在执行 savedquery 不执行
{ [ConnectionError: 连接已关闭。]
姓名:'ConnectionError',
消息:'Connection is closed.',
代码:'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);
});
};
}
你应该删除
options: {
encrypt: true
}
来自您的 dbConfig
我知道这是一个老问题,但这个答案是为面临同样问题的其他人准备的。我有同样的问题,我所做的是,使用如下承诺。
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);
}
}
这解决了我的问题。您可以找到修复 here.
我只是用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);
});
}
希望对大家有所帮助。
我在使用 sqlserver 2012 的 npm mssql 3.0.0 中遇到错误
我正在创建单页应用程序,其中我使用 restful 使用 express 。 有 4 种方法执行查询并将数据返回给响应。 对于每种方法,我打开连接并关闭连接。
但是在调用 savedquery 时发生连接关闭错误。
每个方法代码都类似于 savedquery 方法(复制粘贴代码只更改查询)但它们正在执行 savedquery 不执行
{ [ConnectionError: 连接已关闭。] 姓名:'ConnectionError', 消息:'Connection is closed.', 代码:'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);
});
};
}
你应该删除
options: {
encrypt: true
}
来自您的 dbConfig
我知道这是一个老问题,但这个答案是为面临同样问题的其他人准备的。我有同样的问题,我所做的是,使用如下承诺。
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);
}
}
这解决了我的问题。您可以找到修复 here.
我只是用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);
});
}
希望对大家有所帮助。