Zoeken op website

typescript - Hoe kan ik een persistente PostgreSQL-verbinding onderhouden vanuit een Next.js 14 API?


>! 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)

Deze verbinding is nieuw. In het eerste geval, bij het aanroepen van 'login', wordt één verbinding gemaakt. Bij volgende aanroepen wordt geen nieuwe verbinding gemaakt. Bij het aanroepen van 'get users' wordt echter wel een nieuwe verbinding gemaakt. Elke aanvraag maakt een nieuwe verbinding.

Ik wil die verbinding behouden. Elke aanvraag creëert geen nieuwe verbinding