Desarrollo de Servidores Web con Koa2 en Node.js

Configuración Inicial

Para comenzar con Koa2, instale el paquete usando yarn o npm. A continuación, se muestra un ejemplo básico de configuración del servidor.

const Koa = require('koa');
const servidor = new Koa();

servidor.use(async (ctx, siguiente) => {
  ctx.body = '¡Bienvenido al servidor Koa!';
  await siguiente();
});

servidor.listen(3000, () => {
  console.log('Servidor activo en el puerto 3000');
});

Generación de Proyectos con Plantillas

Utilice el generador de Koa2 para crear una estructura de proyecto base. Enstale globalmente el generador y cree un nuevo proyecto.

npm install -g koa2-generator
koa2 mi-proyecto-koa

Integre motores de plantillas como Pug para cotnenido dinámico. Primero, instale el paquete de Pug.

yarn add pug

Cree una plantilla en un archivo separado, por ejemplo vistas/index.pug, y configúrela en el servidor.

const Koa = require('koa');
const vistas = require('koa-views');
const { join } = require('path');
const servidor = new Koa();

servidor.use(vistas(join(__dirname, 'vistas'), {
  extension: 'pug'
}));

servidor.use(async (ctx, siguiente) => {
  await ctx.render('index', {
    usuario: 'Ana'
  });
});

servidor.listen(3000);

Gestión de Rutas

Implemente enrutamiento con koa-router para manejar diferentes endpoints. Instale el módulo y defina rutas.

yarn add koa-router
const Router = require('koa-router');
const enrutador = new Router();

enrutador.get('/productos', async (ctx) => {
  ctx.body = 'Listado de productos';
});

enrutador.get('/productos/:id', async (ctx) => {
  const idProducto = ctx.params.id;
  ctx.body = `Detalle del producto: ${idProducto}`;
});

servidor.use(enrutador.routes()).use(enrutador.allowedMethods());

Separe las rutas en módulos independientes para mejor organización. Por ejemplo, cree un archivo rutas/productos.js y exporte el enrutador.

Procesamiento de Solicitudes

Para solicitudes GET, acceda a parámetros de consulta mediante ctx.query o ctx.request.query.

enrutador.get('/buscar', async (ctx) => {
  const termino = ctx.query.termino;
  ctx.body = `Resultados para: ${termino}`;
});

Para solicitudes POST, use koa-body para parsear el cuerpo de la solicitud.

yarn add koa-body
const koaBody = require('koa-body');
servidor.use(koaBody());

enrutador.post('/enviar', async (ctx) => {
  const datos = ctx.request.body;
  ctx.body = `Datos recibidos: ${JSON.stringify(datos)}`;
});

Recursos Estáticos

Sirva archivos estáticos como CSS, imágenes y JavaScript usando koa-static.

yarn add koa-static
const static = require('koa-static');
servidor.use(static(join(__dirname, 'publico')));

Manejo de Cookies y Sesiones

Administre cookeis con los métodos integrados de Koa. Para sesiones persistentes, utilice koa-session.

yarn add koa-session
const sesion = require('koa-session');
servidor.keys = ['secreto-clave'];
const configSesion = {
  key: 'app:sid',
  maxAge: 86400000,
  httpOnly: true,
  signed: true
};
servidor.use(sesion(configSesion, servidor));

enrutador.get('/visitas', async (ctx) => {
  ctx.session.contador = (ctx.session.contador || 0) + 1;
  ctx.body = `Contador de visitas: ${ctx.session.contador}`;
});

Integración con Bases de Datos

Conéctese a MongoDB usando el paquete nativo o Mongoose para un enfoque orientado a objetos.

yarn add mongoose

Defina un esquema y modelo en Mongoose.

const mongoose = require('mongoose');

const esquemaProducto = new mongoose.Schema({
  nombre: String,
  precio: Number
});

const ModeloProducto = mongoose.model('Producto', esquemaProducto);

Conecte a la base de datos y realice operaciones CRUD.

mongoose.connect('mongodb://localhost:27017/mi_base', {
  useNewUrlParser: true,
  useUnifiedTopology: true
});

enrutador.post('/agregar', async (ctx) => {
  const nuevoProducto = new ModeloProducto(ctx.request.body);
  await nuevoProducto.save();
  ctx.body = 'Producto guardado';
});

Uso de Redis para Caché y Sesiones

Implemente Redis para mejorar el rendimiento con caché y manejo de sesiones. Instale los módulos necesarios.

yarn add koa-redis redis

Configure Redis como almacén de sesiones.

const Redis = require('koa-redis');
const adaptadorRedis = new Redis();

servidor.use(sesion({
  store: adaptadorRedis,
  key: 'sesion:redis'
}, servidor));

Acceda directamente al cliente Redis para operaciones de caché.

const clienteRedis = adaptadorRedis.client;
await clienteRedis.set('clave', 'valor');
const valor = await clienteRedis.get('clave');

Etiquetas: Koa2 Node.js MongoDB Redis Middleware

Publicado el 6-7 21:24