bolt.new/app/utils/db.server.ts

46 lines
990 B
TypeScript

import knex from 'knex';
import type { Knex } from 'knex';
import { env } from 'node:process';
let db: Knex;
declare global {
var __db: Knex | undefined;
}
// 这个检查可以防止在开发模式下多次创建连接
if (process.env.NODE_ENV === 'production') {
db = getDb();
} else {
if (!global.__db) {
global.__db = getDb();
}
db = global.__db;
}
function getDb() {
return knex({
client: 'mysql2',
connection: {
host: env.DB_HOST,
user: env.DB_USER,
password: env.DB_PASSWORD,
database: env.DB_NAME,
port: Number(env.DB_PORT) || 3306,
},
pool: {
min: 2,
max: 10,
createTimeoutMillis: 3000,
acquireTimeoutMillis: 30000,
idleTimeoutMillis: 30000,
reapIntervalMillis: 1000,
createRetryIntervalMillis: 100,
propagateCreateError: false, // 重要:这将允许连接池在初始连接失败时继续尝试
},
acquireConnectionTimeout: 60000,
});
}
export { db };