Referencia API
Templates API

Templates API

Sistema de plantillas para renderizar vistas HTML.

Objetivos

  • Separar lógica de presentación
  • Reutilizar layouts y componentes
  • Integrarse con cache y seguridad

Registro de Engine

const app = FoxFactory.createInstance({
  templates: {
    engine: 'nunjucks',
    paths: ['./views'],
    options: { autoescape: true }
  }
});

Render en Handler

router.get('/home', (req, res) => {
  res.render('home', { user: req.user, stats });
});

Datos Globales

app.setTemplateGlobals({ appName: 'Fox', year: () => new Date().getFullYear() });

Partials / Includes

Depende del engine (por ejemplo Nunjucks / EJS):

{% include "partials/header.njk" %}

Caching de Templates

Combinar con templateCache({ ttl: 300 }).

router.get('/dashboard', templateCache({ ttl: 120 }), (req, res) => {
  res.render('dashboard', { metrics });
});

Helpers / Filtros

app.registerTemplateFilter('capitalize', str => str.charAt(0).toUpperCase()+str.slice(1));

Layouts

{% extends "layouts/base.njk" %}
{% block content %}Hola {{ user.name }}{% endblock %}

Seguridad

RiesgoMitigación
XSSautoescape, sanitizar input
SSRFNo renderizar URLs externas sin validación
Info LeakNo pasar objetos completos sensibles

Buenas Prácticas

  • Mantener lógica compleja fuera de templates
  • Versionar assets (cache busting)
  • Reutilizar partials y layouts
  • Medir TTFB y optimizar render costoso

Errores Comunes

ProblemaCausaSolución
Variables undefinedFaltan en el contextoProveer defaults / chequear existencia
Render lentoCálculo costoso inlinePrecomputar datos antes de res.render
XSSInserción directa sin escapeUsar autoescape y filtros sanitizadores