如何在Express中正确打开和关闭SQL Server连接

时间:2019-08-16 22:00:51

标签: node.js sql-server express database-connection connection-pooling

我正在尝试构建一个与SQL Server建立连接的node.js Express API。

我正在使用mssql软件包连接到数据库。

但是,当快速发出许多网络请求时,出现以下错误:

  

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

应用

const express = require("express")
const app = express()
const route = require('./src/path/to/route/some-route')

app.use('/v1/route', route)

路线

const express  = require('express')
const router   = express.Router()
const db       = require('../path/to/controllers/db-controller')

router.get('/endpoint-path', (req, res) => {
  db.run_some_stored_procedure('run_some_stored_procedure', req, res)
})

module.exports = router

控制器

我有许多控制器遵循sql.close()pool.close()等的相同模式。

我认为我遇到了问题,因为我错误地调用了这些close方法。

const config = require('../config')
const log    = require('../util/log')
const sql    = require('mssql')

exports.run_some_stored_procedure = (proc, req, res) => {
  sql.close()
  sql.connect(config.properties).then(pool => {
    return pool.request()
      .input('someInputParam', sql.Int, req.params.someInput)
      .execute(proc)
      .then(response => {
        res.send(response['recordsets'][0])
        return log.dataSession(proc, req, res, pool, response)
      }, err => {
        res.send(err);
        return log.dataSession(proc, req, res, pool, err)
      })
      .finally(() => {
        pool.close()
        sql.close()
      })
  })
  .catch((err) => { sql.close() })
}

finally块似乎无法正确执行,或者我在其他地方遇到问题。

如何构造API以正确处理池以及打开和关闭SQL连接?

0 个答案:

没有答案