Complete "Lección 4: Trabajar con nodos y conectar servicios externos" primero para desbloquear esta lección.Ir a la lección anterior

Qué son las expresiones en n8n

Las expresiones de n8n te permiten referenciar datos de forma dinámica en lugar de codificar valores fijos. Cuando conectas nodos entre sí, los datos fluyen de un nodo al siguiente como objetos JSON. Las expresiones te dan una manera de acceder a ese JSON y extraer exactamente el valor que necesitas — o transformarlo antes de pasarlo.

Cada expresión en n8n se envuelve entre dobles llaves. Dentro de esas llaves escribes código compatible con JavaScript, y n8n lo evalúa en tiempo de ejecución cuando se ejecuta el workflow.

javascript
{{ $json.email }}

Esa expresión lee el campo email desde los datos de entrada del nodo actual. Simple, pero este patrón es la base de todo lo que harás con mapeo de datos.

diagrama de flujo mostrando los datos que van desde el Nodo A (salida JSON) hacia un evaluador de expresiones, y luego al Nodo B como un valor resuelto

Variables clave que usarás a diario

n8n expone varias variables integradas dentro de las expresiones. Conocer estas tres cubre la gran mayoría de los workflows reales.

La primera es $json, que se refiere al objeto de datos del item actual. Si un nodo anterior devolvió un registro de usuario, $json.name te da el campo name del usuario.

La segunda es $node, que te permite retroceder a cualquier nodo nombrado en el workflow. Esto es útil cuando necesitas datos de un nodo que no es el predecesor inmediato.

javascript
{{ $node["HTTP Request"].json.body.id }}

La tercera es $now, que devuelve el timestamp actual como un objeto DateTime de Luxon. Puedes llamar métodos de Luxon directamente sobre él.

javascript
{{ $now.toISO() }}

n8n incluye Luxon para manipulación de fechas y también expone la biblioteca estándar completa de JavaScript, por lo que los métodos de string, Math y utilidades de JSON funcionan dentro de las expresiones.

Transformando datos con expresiones

Las expresiones no son solo para leer valores — puedes transformarlos inline. Los patrones comunes incluyen concatenación de strings, formateo de números, condicionales y operaciones con arrays.

Construir un nombre completo a partir de dos campos:

javascript
{{ $json.firstName + " " + $json.lastName }}

Un condicional simple para establecer un valor por defecto cuando un campo podría faltar:

javascript
{{ $json.phone ? $json.phone : "N/A" }}

Formatear una fecha que llega como timestamp Unix:

javascript
{{ DateTime.fromSeconds($json.createdAt).toFormat("yyyy-MM-dd") }}

El nodo Set es el lugar más natural para usar estas expresiones. Añádelo entre dos nodos siempre que necesites renombrar campos, combinar valores o eliminar campos que no necesitas aguas abajo.

diagrama de flujo: el Nodo Webhook genera un JSON crudo → el Nodo Set aplica expresiones para reformular campos → el Nodo HTTP Request envía un payload limpio

Mapeando datos entre nodos

El mapeo de datos significa conectar la salida de un nodo a la entrada de otro. En la interfaz de n8n puedes arrastrar un campo directamente sobre un parámetro de destino, y n8n escribe la expresión por ti. Pero entender lo que genera te ayuda a corregirlo cuando algo falla.

Cuando un nodo devuelve múltiples items, $json se refiere a cada item individualmente mientras n8n itera. Así que si tu nodo anterior devolvió 50 filas, cada expresión se evalúa 50 veces — una vez por item. Este es el comportamiento por defecto y no requiere configuración extra.

Si necesitas agregar todos los items en una sola estructura — por ejemplo, para construir un array de emails a partir de todas las filas — usa el nodo Code con $input.all().

javascript
const emails = $input.all().map(item => item.json.email);
return [{ json: { emailList: emails } }];

El nodo Code ejecuta JavaScript completo y es la herramienta adecuada cuando una expresión dentro de un parámetro de campo se vuelve demasiado compleja de leer.

Errores comunes y cómo evitarlos

El error más frecuente es referenciar un campo que no existe, lo que devuelve undefined y puede romper silenciosamente los nodos posteriores. Siempre usa el panel de previsualización del editor de expresiones — muestra el valor resuelto antes de guardar.

Un segundo problema común es olvidar que $json se refiere a la entrada del nodo actual, no a su salida. Si estás dentro de un nodo Set y quieres datos de dos pasos atrás, usa $node["NombreDelNodo"].json en su lugar.

Un tercer error es tratar $now como un string plano. Es un objeto Luxon, por lo que compararlo directamente con un string de fecha no funcionará. Convierte ambos lados al mismo tipo primero.

javascript
{{ $now.toISODate() === "2025-01-15" }}

Resumen

Las expresiones son como los workflows de n8n se vuelven dinámicos. El patrón central — dobles llaves alrededor de una expresión JavaScript que lee de $json, $node o $now — maneja la mayoría de los escenarios. Usa el nodo Set para mapeo y renombrado de campos sencillos, y escala al nodo Code cuando la lógica se vuelve compleja. Siempre verifica las expresiones en el panel de previsualización antes de ejecutar un workflow en vivo.

Práctica de la lección

Punto de control de la lección

Repasa lo aprendido y recibe comentarios sobre tu trabajo.

0/1
Respondidas · 0/1