node.js - 节点 mssql 并发请求导致“连接已关闭”
问题描述
我正在使用节点 js 的 mssql 包,每条路由我都在创建一个新连接并执行事务,当我从客户端并行调用两个 api 时,mssql 抛出“连接已关闭”
示例:当此 api 同时调用时,“连接已关闭”即将出现
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 文件并在您的路线中使用它们。
推荐阅读
- python - 尝试将工作流程从 stata 复制到 python - 循环和导出问题
- excel - 写入文本文件时出现错误的文件模式错误
- python - 使用 exec() 函数使字符串成为类的名称
- c# - 如何使用 Take 和 Skip 方法从数据库表中获取所有条目?
- angular - 使用 DomSanitizer 绕过 Angular 中的安全性时,如何安全地避免 Angular 中的 XSS 攻击?
- python - 如何读取 CSV 文件中的表情符号?
- swift - 使用 zpl (Zebra ZQ620) 打印时蓝牙连接经常断开
- git - 由于缺少正斜杠而导致 git 命令出现问题
- c# - ASP.NET:异步操作行为不异步
- sharepoint - 错误 - [tsc] 错误:找不到模块 '@microsoft/rush-stack-compiler-3.2' - 在 SharePoint 框架 Web 解决方案中运行 gulp serve 命令时