我正在使用 NodeJS 连接 SQL Server。我最初的代码是:
const poolA = new sql.ConnectionPool(config, err => {
poolA.request()
.query("select * from AnyTable", function(err, result) {
if (err)
message = "Error!";
else {
//Do something else
message = "Done!";
}
})
});
我收到“连接关闭错误”。我包括了
poolA.close()
也没有解决问题。
我将其更改为:
new sql.ConnectionPool(config).then(pool => {
pool.request()
.query("select * from AnyTable")
}).then(result => {
//Do something else
message = "Done!";
sql.close();
}).catch(err => {
message = "Error!";
sql.close();
});
现在我收到“.then 不是函数”错误。
正确的方法是什么:
- 如果连接不存在则创建
- 如果连接已存在,请使用它
我遇到了各种各样的错误。有人可以帮我解决这个问题吗?
最佳答案
如果您使用 Node ,那么您应该使用 promise ,就像您在第二个选项中所做的那样。所以正确的做法应该如下 -
sql.close()
sql.connect(sqlConfig).then(pool => {
pool.request()
.input('param1', sql.Int, valueParam1)
.input('param2', sql.Int, valueParam2)
.execute(procedureToExecute).then(result => {
// Do whatever you want with the result.
})
请记住,只有从 promise 中返回任何内容,链接才有可能。在您的情况下,您没有返回连接池或 promise 中的任何内容,因此会出现 “.then 不是函数”错误。
因此,您应该返回该池,以防您想再次使用该池或如果你想在then部分使用结果,则返回结果。
第二个更好的选择是创建一次连接,然后在任何地方使用它。这一概念与 MongoDB ConnectionPooling 的概念非常相似。详细内容请确认。为此,创建一个 db.js
文件,如下所示 -
'use strict'
const config = require(__dirname + '/index.js')
, mssql = require('mssql')
, sqlConfig = {
, user: config.databaseUsername
, password: config.databasePassword
, server: config.databaseHost
, database: config.database.database
pool: {
max: 10,
min: 0,
idleTimeoutMillis: 30000
}
}
let connection = mssql.connect(sqlConfig,err => {
if (err)
{throw err}
})
module.exports = connection
然后将上述内容连接到您的服务器文件或您想要使用连接的任何模块中,如下所示 -
db = require(process.cwd() + '/config/db.js')
您可以将其包含在请求选项中,如下所示 -
let options = {db:db}
request.options = options
希望这对您有所帮助,如果您需要任何帮助,请告诉我。
关于sql-server - NodeJS 和 SQL Server 连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45874447/