Lección 20 de 20 · Lectura y práctica
Quiz: Revisión del proyecto integrador
Tipo de lección: QuizConcepto claveEn el desarrollo full-stack con SvelteKit, las Server Actions representan un cambio fundamental en cómo manejamos la lógica del servidor. Piensa en ellas como funciones que viven en el servidor.
Del concepto a la práctica
Taller de esta lección
La revisión final debe comprobar relaciones entre piezas. Una respuesta sólida puede seguir una tarea desde la sesión hasta la persistencia, y desde la persistencia hasta la notificación. También debe detectar qué afirmaciones serían falsas, como decir que un mensaje WebSocket garantiza que la base de datos guardó el cambio.
Ejemplo resuelto
Pregunta: u1 envía completar t2, cuyo ownerId es u2. Respuesta: la acción obtiene la sesión de u1, busca t2, rechaza la autorización, no modifica el registro y no publica evento. La pantalla muestra un error controlado.
Incluye además el caso confirmación perdida: la fuente contiene t3 y la notificación falla. Respuesta del quiz: no deshacer silenciosamente ni crear t4 al reintentar con la misma clave; reconciliar mediante lectura/idempotencia y recuperar el aviso pendiente. Comprueba la autorización en load y action, y prueba que un socket con roomId ajeno es rechazado. El contador de mensajes no demuestra ausencia de filtración: inspecciona el contenido y permisos de cada destino.
Pruébalo
Traza el caso válido de crear t3.
Traza el caso no autorizado sobre t2.
Indica cuándo se publica el evento.
Señala qué prueba demuestra que no se filtraron datos.
Comprueba tu resultado
Error frecuente: considerar suficiente que el botón no aparezca; corrígelo probando una solicitud manipulada contra la acción.
Ejercicio: completa ambas trazas con entrada, comprobación, escritura y evento. Resultado esperado: t3 produce una escritura y un intento de notificación posterior, que ambos clientes reciben en el fixture conectado; t2 produce rechazo, cero escrituras y cero eventos.

Mapa de prácticaEl servidor puede obtener datos y producir el HTML inicial. El navegador muestra el resultado y ejecuta las interacciones que necesitan estado local. Mantén las claves sensibles en el servidor y define qué parte se ejecuta en cada entorno.
Ver la infografía en tamaño completo ↗Tipo de lección: Quiz
Concepto clave
En el desarrollo full-stack con SvelteKit, las Server Actions representan un cambio fundamental en cómo manejamos la lógica del servidor. Piensa en ellas como funciones que viven en el servidor pero que puedes llamar desde el cliente, similar a cómo un restaurante tiene una cocina (servidor) donde se preparan los platos, pero los comensales (cliente) solo ven el menú y hacen pedidos.
Este enfoque elimina la necesidad de crear APIs REST tradicionales para cada operación, reduciendo la complejidad y mejorando el rendimiento. En nuestra app de tareas en tiempo real, esto significa que acciones como crear, actualizar o eliminar tareas se ejecutan directamente en el servidor, con validación y seguridad integradas, mientras el cliente mantiene una interfaz reactiva.
Cómo funciona en la práctica
Imagina que estás construyendo la funcionalidad para agregar una nueva tarea. En lugar de enviar una solicitud HTTP a un endpoint API, defines una Server Action en +page.server.js que maneja la lógica. SvelteKit se encarga de serializar los datos, enviarlos al servidor, ejecutar la acción y devolver el resultado al cliente.
Paso a paso: 1) El usuario escribe una tarea en el formulario. 2) Al enviar, se llama a la Server Action createTask. 3) El servidor valida los datos, los guarda en la base de datos. 4) La interfaz se actualiza automáticamente con la nueva tarea, gracias a la reactividad de Svelte.
Código en acción
Antes: Usando un endpoint API tradicional en src/routes/api/tasks/+server.js:
// Método POST para crear tareas
export async function POST({ request }) {
const data = await request.json();
// Validación manual
if (!data.title) {
return new Response(JSON.stringify({ error: 'Título requerido' }), { status: 400 });
}
// Lógica de base de datos
const newTask = await db.tasks.create(data);
return new Response(JSON.stringify(newTask), { status: 201 });
}Después: Usando una Server Action en src/routes/tasks/+page.server.js:
// Server Action para crear tareas
export const actions = {
createTask: async ({ request }) => {
const data = await request.formData();
const title = data.get('title');
// Validación integrada con SvelteKit
if (!title) {
return { success: false, error: 'Título requerido' };
}
// Lógica de base de datos
const newTask = await db.tasks.create({ title });
return { success: true, task: newTask };
}
};Errores comunes
- No validar datos en el servidor: Confiar solo en la validación del cliente deja agujeros de seguridad. Siempre valida en la Server Action.
- Olvidar manejar estados de carga: Las Server Actions pueden tardar; usa el estado
$page.formde SvelteKit para mostrar indicadores. - Mezclar lógica de cliente y servidor en el mismo archivo. Mantén las Server Actions en archivos
.server.js. - No usar transacciones en operaciones críticas: En apps de tareas, al marcar varias como completadas, usa transacciones de base de datos.
- Ignorar el manejo de errores: Envuelve las acciones en try-catch y devuelve errores amigables.
Checklist de dominio
- He implementado al menos 3 Server Actions para CRUD de tareas.
- He validado datos tanto en cliente como en servidor.
- He configurado la base de datos para actualizaciones en tiempo real.
- He optimizado el rendimiento con lazy loading de componentes.
- He manejado errores y estados de carga en todas las acciones.
- He asegurado que la app funcione sin JavaScript (progressive enhancement).
- He desplegado la app y verificado su funcionamiento en producción.
Refactorizar una funcionalidad de tareas a Server Actions
En este ejercicio, mejorarás una app de tareas existente que usa APIs REST, convirtiéndola a Server Actions de SvelteKit para mejor rendimiento y simplicidad.
- Analiza el código actual: Abre el archivo
src/routes/tasks/+page.sveltey localiza la función que envía datos a/api/tasks. - Crea la Server Action: En
src/routes/tasks/+page.server.js, define una acción llamadaupdateTaskque recibaidycompleteddesde un FormData. - Implementa la lógica: Dentro de la acción, actualiza la tarea en la base de datos y devuelve un objeto con
successy los datos actualizados. - Conecta el cliente: En el componente Svelte, reemplaza la llamada fetch con
form actionque use la Server Action. - Prueba la funcionalidad: Verifica que al marcar una tarea como completada, la interfaz se actualice sin recargar la página.
Pistas
- Usa
enhancede SvelteKit para mejorar el formulario sin JavaScript. - Recuerda que los datos de formulario se acceden con
request.formData()en la Server Action. - Para devolver errores, usa
return { success: false, error: 'mensaje' }.
Evalua tu comprension
Completa el quiz interactivo de arriba para ganar XP.
Sigue con SvelteKit Full-Stack: Construye Aplicaciones Web Performantes con Server Actions
Esta lección forma parte de un curso de Cursalo. Revisa su programa y elige entre la compra individual o el acceso a toda la escuela.
Si ya tenías acceso a este curso, entra con tu cuenta: tus derechos y tu progreso se conservan. No necesitas comprarlo de nuevo.