我正在尝试构建一个与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连接?