Next.js

Database Connection

Connecting to a database using a generic driver (e.g., pg for PostgreSQL) directly in Next.js Server Actions or Route Handlers.

Installation: Install PostgreSQL client.
📄terminal
BASH
npm install pg
npm install -D @types/pg

# .env
# DATABASE_URL="postgresql://user:password@localhost:5432/mydb"
Database Config: Singleton pattern to manage DB connection pooling during hot reloads.
📄lib/db.ts
TS
import { Pool } from 'pg';

const globalForPg = global as unknown as { pool: Pool };

export const pool =
  globalForPg.pool ||
  new Pool({
    connectionString: process.env.DATABASE_URL,
    max: 10,
    idleTimeoutMillis: 30000,
  });

if (process.env.NODE_ENV !== 'production') {
  globalForPg.pool = pool;
}
Usage in Server Component: Fetching data directly in a React Server Component.
📄app/users/page.tsx
TSX
import { pool } from '@/lib/db';

interface User {
  id: number;
  name: string;
  email: string;
}

export default async function UsersPage() {
  const client = await pool.connect();
  let users: User[] = [];
  
  try {
    const res = await client.query('SELECT id, name, email FROM users ORDER BY id DESC LIMIT 10');
    users = res.rows;
  } finally {
    client.release();
  }

  return (
    <div>
      <h2>User List</h2>
      <ul>
        {users.map((user) => (
          <li key={user.id}>{user.name} ({user.email})</li>
        ))}
      </ul>
    </div>
  );
}