sql-server - NodeJS 和 SQL Server 连接错误

标签 sql-server node.js

我正在使用 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 不是函数”错误。

正确的方法是什么:

  1. 如果连接不存在则创建
  2. 如果连接已存在,请使用它

我遇到了各种各样的错误。有人可以帮我解决这个问题吗?

最佳答案

如果您使用 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/

相关文章:

node.js - 在云功能上使用puppeteer拒绝了网站访问

sql - 搜索值列表的出现

sql - SQL Case 语句中的运算优先顺序是什么?

javascript - 实现firestore Nodejs

angularjs - 如何使用 MEAN 和sails.js 开始一个新项目

node.js - 在实时 Webbynode 服务器上仅看到 "Welcome to socket.io."

node.js - 读取lambda函数中exports.handler中未执行的dynamodb代码

c# - 使用 Entity Framework 读取时出错

c# - 使用c#从sql服务器下载文件

sql-server - 查询链接服务器上的全局临时表