Integración de React Server Components con PostgreSQL
Clase 5 de 24 • Curso de Next.js Avanzado
Contenido del curso
- 10

Internacionalización en NextJS: Middleware y Rutas Dinámicas
11:19 - 11

Internacionalización en Next.js con Traducciones Dinámicas
14:47 - 12

Autenticación de Usuarios con Middleware en Next.js
08:36 - 13

Administración de Cookies con Next.js y JavaScript para Autenticación
15:40 - 14

Integración de Feature Flags en Next.js con LaunchDarkly
20:50 - 15

Manejo de Errores en Next.js: Server Actions y Páginas de Error
14:34 - 16

Integración de Sentry para Monitoreo de Errores en Next.js
12:47
- 17

Gestión del Caché en Next.js: Novedades y Estrategias Avanzadas
17:28 - 18

Seguridad en Next.js: Server Actions y Componentes React
08:35 - 19

Seguridad de Cookies y Encriptación en Aplicaciones Next.js
16:12 - 20

Optimización de Rendimiento en Next.js: Técnicas y Herramientas
17:16 - 21

Despliegue de Aplicaciones Next.js con Vercel y Docker
06:25 - 22

Despliegue de Next.js en Fly.io usando Docker y configuración de Postgres
20:30 - 23

Despliegue de Aplicaciones Next.js con Flyo y Docker
11:00 - 24

Migración y Optimización de Páginas con Next.js
01:59
La integración de React Server Components con bases de datos como PostgreSQL ofrece una arquitectura potente y segura para manejar datos sensibles en aplicaciones modernas. Aquí exploramos cómo construir una aplicación con esta tecnología, realizando consultas SQL sin intermediarios y maximizando la seguridad y eficiencia de tu backend.
¿Qué ventajas ofrecen los React Server Components para proteger datos?
- Protección del código del navegador: React Server Components permiten que el código sensible permanezca en el servidor, enviando al cliente solo el HTML necesario.
- Minimización de exposición: Los navegadores no acceden directamente a las APIs o secretos del servidor, reduciendo riesgos de seguridad.
- Separación de lógica cliente-servidor: Next.js gestiona esta separación automáticamente, facilitando la implementación de buenas prácticas.
¿Cómo conectar PostgreSQL directamente desde un React Server Component?
-
Configuración de la base de datos:
- Utiliza
psqlpara crear la base de datos y tablas. En este ejemplo:CREATE DATABASE "expense_tracker"; \c expense_tracker CREATE TABLE expenses ( id SERIAL PRIMARY KEY, name TEXT NOT NULL, amount NUMERIC NOT NULL, date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); - Verifica la estructura desde la línea de comandos o una GUI de PostgreSQL.
- Utiliza
-
Conexión en Next.js:
- Configura la conexión en un archivo dedicado. Usa librerías como
pg:const { Pool } = require('pg'); const pool = new Pool({ connectionString: process.env.DATABASE_URL, }); module.exports = pool;
- Configura la conexión en un archivo dedicado. Usa librerías como
-
Consultas directas a SQL:
- Define funciones para leer y mutar datos:
const getExpenses = async () => { const result = await pool.query('SELECT * FROM expenses ORDER BY date DESC'); return result.rows; }; const addExpense = async (name, amount) => { await pool.query('INSERT INTO expenses (name, amount) VALUES ($1, $2)', [name, amount]); };
- Define funciones para leer y mutar datos:
¿Cómo integrar consultas con un React Server Component?
- Uso de funciones asincrónicas: Los componentes de servidor pueden llamar funciones SQL directamente sin intermediarios como ORMs.
- Ejemplo de lectura y renderizado:
import { getExpenses } from './db'; export default async function ExpenseTracker() { const expenses = await getExpenses(); return (
); } {expenses.map(expense => (Name Amount Date ))}{expense.name} {expense.amount} {expense.date}
¿Cómo manejar mutaciones desde el cliente?
-
Uso de formularios y acciones:
'use client'; const handleSubmit = async (formData) => { const name = formData.get('name'); const amount = formData.get('amount'); await fetch('/add-expense', { method: 'POST', body: JSON.stringify({ name, amount }) }); }; -
Revalidación de datos en Next.js:
- Para actualizar automáticamente la UI tras una mutación:
import { revalidatePath } from 'next/cache'; await revalidatePath('/expense-tracker');
- Para actualizar automáticamente la UI tras una mutación:
¿Por qué es más seguro trabajar de esta forma?
- API oculta al cliente: Next.js genera rutas dinámicas protegidas, dificultando el acceso malicioso.
- Datos sensibles solo en el servidor: La lógica permanece oculta al navegador.
- Protección contra ataques automatizados: Al evitar exponer rutas predecibles, se reducen las superficies de ataque.