typescript - ¿Cómo puedo mantener una conexión persistente a PostgreSQL desde una API de Next.js 14?
>! data-source.ts
import entities from "../entity"
import "reflect-metadata"
import { DataSource } from "typeorm"
require('dotenv').config();
const poolConfig = {
min: 1,
max: 10,
idleTimeoutMillis: 3000000,
};
export const AppDataSource = new DataSource({
type: "postgres",
name: "templeaddress",
host: process.env.NEXT_PUBLIC_DB_HOST,
port: Number(process.env.NEXT_PUBLIC_DB_PORT),
username: process.env.NEXT_PUBLIC_DB_USER,
password: process.env.NEXT_PUBLIC_DB_PASS,
database: process.env.NEXT_PUBLIC_DB_NAME,
synchronize: true,
logging: false,
entities: entities,
migrations: [],
subscribers: [],
ssl: true,
extra: {
pool: poolConfig,
ssl: {
rejectUnauthorized: false,
},
},
})
>! db.ts
import { DataSource } from "typeorm";
import { AppDataSource } from "./data-source";
let databaseConnection: DataSource | null = null;
export const initializeDatabase = async (): Promise<DataSource> => {
try {
if (databaseConnection) {
console.log("Using existing database connection");
return AppDataSource;
}
if (!databaseConnection) {
databaseConnection=await AppDataSource.initialize();
console.log("Database Connected");
}
return AppDataSource;
} catch (error) {
return error;
}
};
>! route.ts
import { NextRequest, NextResponse } from "next/server";
import { initializeDatabase } from "@/config/db";
import { Services } from "@/entity";
import { ILike, Repository } from "typeorm";
export async function GET(
req: NextRequest,
{ params }: { params: { page: string; itemsPerPage: number } }
) {
try {
const page = parseInt(params.page, 10) || 1;
const itemsPerPage = Number(params.itemsPerPage);
let search = req.nextUrl.searchParams.get("search");
if (!search || search === undefined) {
search = "";
}
const dataSource = await initializeDatabase();
const servicesRepository: Repository<Services> =
dataSource.getRepository(Services);
const [items, totalCount] = await servicesRepository.findAndCount({
where: { active: true, is_delete: false, name: ILike(`%${search}%`) },
take: itemsPerPage,
skip: (page - 1) * itemsPerPage,
order: { created_at: "DESC" },
});
let count = Math.ceil(totalCount / itemsPerPage);
return NextResponse.json(
{ items, totalCount: count, message: "fetched services" },
{ status: 200 }
);
} catch (error) {
return NextResponse.json(error, { status: 500 });
}
}
[enter image description here](https://i.sstatic.net/yc8LL.png)
Esta conexión es nueva. En el primer caso, al llamar a 'login', se crea una conexión. En llamadas posteriores, no se crea una nueva conexión. Sin embargo, en el caso de llamar a 'get users', se crea una nueva conexión. Cada solicitud crea una nueva conexión.
Quiero mantener esa conexión. Cada solicitud no crea una nueva conexión