Code Node
El Code node permet escriure codi JavaScript directament dins d'un workflow. És el node més potent de n8n perque et dona control total sobre les dades.
Quan usar el Code node
Usa el Code node quan:
- Necessites lògica que no pot expressar-se amb nodes visuals
- Has de transformar dades de manera complexa
- Vols calcular valors derivats (percentatges, totals, dates...)
- Necessites formatar o reestructurar la sortida d'un node anterior
Estructura del codi
El Code node funciona en dos modes:
El codi s'executa una sola vegada i rep tots els items de cop. Útil per a operacións que necessiten veure tota la llista (calcular totals, ordenar, agrupar).
El codi s'executa una vegada per cada item. És el mode per defecte. Més simple per a transformacions individuals.
Quin mode triar?
- Si la lògica depèn de la relació entre items (calcular mitjana, trobar el màxim...) → Run Once for All Items
- Si cada item es transforma independentment → Run Once for Each Item (per defecte)
Variables disponibles
El Code node te accés a diverses variables i funcions predefinides:
Accés a les dades
// Item actual (mode per item)
const item = $input.item;
const dades = $input.item.json;
// Tots els items (mode per tots)
const items = $input.all();
// Dades d'un node anterior concret
const dadesNode = $node["Nom del node"].json;
// El primer item d'un node anterior
const primerItem = $("Nom del node").first().json;
Data i hora
// Data actual (objecte Luxon)
const ara = $now;
const araISO = $now.toISO(); // "2025-01-15T09:30:00.000+01:00"
const araCat = $now.setLocale('ca').toLocaleString();
// Operacions amb dates
const dema = $now.plus({ days: 1 });
const setmanaProp = $now.plus({ weeks: 1 });
const diferenciaHores = $now.diff($now.minus({ hours: 3 }), 'hours').hours;
Variables d'entorn
Exemples practics
1. Calcular estadistiques d'una llista
// Mode: Run Once for All Items
const items = $input.all();
const notes = items.map(i => i.json.nota);
const suma = notes.reduce((a, b) => a + b, 0);
const mitjana = suma / notes.length;
const maxima = Math.max(...notes);
const minima = Math.min(...notes);
const aprovats = notes.filter(n => n >= 5).length;
return [{
json: {
total_alumnes: items.length,
mitjana: Math.round(mitjana * 100) / 100,
nota_maxima: maxima,
nota_minima: minima,
aprovats: aprovats,
suspesos: items.length - aprovats,
percentatge_aprovats: Math.round((aprovats / items.length) * 100) + '%'
}
}];
2. Transformar i netejar dades
// Mode: Run Once for Each Item
const item = $input.item.json;
// Netejar i normalitzar
const nomNet = item.nom.trim().toLowerCase()
.split(' ')
.map(p => p.charAt(0).toUpperCase() + p.slice(1))
.join(' ');
const emailNet = item.email.trim().toLowerCase();
// Validar email
const emailValid = /^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(emailNet);
return {
json: {
nom: nomNet,
email: emailNet,
email_valid: emailValid,
data_processament: $now.toISO()
}
};
3. Agrupar items per categoria
// Mode: Run Once for All Items
const items = $input.all();
// Agrupar per departament
const grups = {};
for (const item of items) {
const dept = item.json.departament || 'Sense assignar';
if (!grups[dept]) grups[dept] = [];
grups[dept].push(item.json.nom);
}
// Convertir a llista d'items
return Object.entries(grups).map(([dept, noms]) => ({
json: {
departament: dept,
membres: noms,
total: noms.length
}
}));
4. Generar dades dinàmiques
// Generar una llista de les properes 7 dies
const dies = [];
for (let i = 0; i < 7; i++) {
const dia = $now.plus({ days: i });
dies.push({
json: {
index: i,
data: dia.toISODate(),
dia_setmana: dia.setLocale('ca').weekdayLong,
es_festiu: [6, 7].includes(dia.weekday) // 6=dissabte, 7=diumenge
}
});
}
return dies;
Gestió d'errors al Code node
Pots llançar errors de manera controlada:
const item = $input.item.json;
if (!item.email) {
throw new Error(`L'item no te camp email: ${JSON.stringify(item)}`);
}
if (item.nota < 0 || item.nota > 10) {
throw new Error(`Nota fora de rang [0-10]: ${item.nota}`);
}
return { json: item };
Errors del Code node
Si el codi llança un error, el node falla. Si tens activat Continue on Fail, el workflow continuara però l'item tindrà el flag $json.error amb el missatge d'error.
Depuració (debugging)
Pots usar console.log() per imprimir valors i inspeccionar-los:
const item = $input.item.json;
console.log('Processant item:', JSON.stringify(item, null, 2));
console.log('Nota rebuda:', item.nota);
Els logs apareixen a la pestanya Logs del panell del node i als logs del contenidor Docker.
Miniactivitat ACN8N11
Crea un workflow amb un Code node (mode Run Once for All Items) que: 1. Generi una llista de 10 numeros aleatoris entre 1 i 100 2. Calculi la mitjana, el màxim, el mínim i la mediana 3. Indiqui quants son parells i quants son senars 4. Retorni un sol item amb totes les estadistiques