节点 mssql 并发请求结果 "Connection is closed"

node mssql concurrent request resulting "Connection is closed"

我正在使用节点 js 的 mssql 包,每条路由我正在创建一个新连接并执行事务,当我从客户端并行调用两个 apis 时,mssql 抛出 "Connection is closed"

示例:当 api 同时调用 "Connection is closed" 时

router.get('/', async function (req, res, next) {
   let result = {};
   try {
       let pool = await sql.connect(db);
       try {
          let sqlResponse = await pool.request().execute('p_getAllData');
          result = {
             status: true,
             data: sqlResponse.recordsets[0]
          }
          pool.close();
      } catch (e) {
          pool.close();
          throw e;
      }
   } catch (e) {
       result = {
          status: false,
          data: e.message
       }
       console.log(e);
   } 
   res.send(result);
});

我不会为每个请求创建池并在每个请求时关闭它。这是非常低效的。您应该在启动服务器并重新使用它时创建一次连接池。

这样的方法

let pool;

app.listen(port, async () => {
   console.log(`Example app listening on port ${port}!`);
pool = await sql.connect("connectionstring");
});

在你的路线中,你基本上像平常一样使用游泳池。

更合适的方法是创建一个包含所有相关方法的 dbOperation 文件,并在您的路由中使用它们。