Búsqueda de sitios web

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