我在应用程序中使用SvelteKitVite.js和带有Node.jsmariadb包.我在db.js文件中有以下代码:

import mariadb from 'mariadb';

const databaseConnectionPoolConfig = {
  ...
};

let databaseConnectionPool = undefined;

export function createDatabaseConnectionPool() {
  return databaseConnectionPool ??= mariadb.createPool(databaseConnectionPoolConfig);
}

hooks.server.js文件中,我有以下代码:

import { createDatabaseConnectionPool } from '$lib/db';

createDatabaseConnectionPool();

执行热重新加载时,databaseConnectionPool将重置为未定义,但池中的连接不会关闭,并会创建新的连接.我通过运行以下查询判断了这一点:

SHOW STATUS LIKE 'Threads_connected';

每次执行热重新加载databaseConnectionPoolConfig.connectionLimit属性指定的连接数时,它都会增加.

我如何才能防止这种情况发生?

推荐答案

我使用globalThis对象解决了这个问题.当发生热重新加载时,globalThis对象不会被重置,这允许保留数据库连接池.这是我想出的解决方案:

// hooks.server.js

globalThis.databaseConnectionPool ??= mariadb.createPool(databaseConnectionPoolConfig);

Javascript相关问答推荐

我可以后增量超过1(最好是内联)吗?

如何避免使用ajax在Vue 3合成API中重定向

根据总价格对航班优惠数组进行排序并检索前五个结果- Angular HTTP请求

有条件的悲剧

每次子路由重定向都会调用父加载器函数

Rehype将hashtag呈现为URL

Angular 17—每当一个布尔变量变为真时触发循环轮询,只要它保持为真

为什么promise对js中的错误有一个奇怪的优先级?

如何从Intl.DateTimeFormat中仅获取时区名称?

Next.js服务器端组件请求,如何发送我的cookie token?

单个HTML中的多个HTML文件

使用Nuxt Apollo在Piniastore 中获取产品细节

如何在.NET Core中将chtml文件链接到Java脚本文件?

Puppeteer上每页的useProxy返回的不是函数/构造函数

如何在DYGRAPS中更改鼠标事件和键盘输入

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

postman 预请求中的hmac/sha256内标识-从js示例转换

表单数据中未定义的数组键

将延迟加载的模块转换为Eager 加载的模块

重新渲染过多(&Q).REACT限制渲染次数以防止无限循环.使用REACT下拉菜单时