Aller au contenu principal

Nœud Code

Le nœud Code permet d'exécuter du code JavaScript personnalisé dans votre flux : traiter des données avec une logique personnalisée, transformer des données, effectuer des calculs complexes et implémenter une logique métier spécifique.

Paramètres​

ParamètreTypeObligatoireDéfautDescription
AppApp❌—Application associée au nœud.
Code JavaScriptJavaScript✅—Script exécuté par le nœud pour transformer ou traiter les données.
Authentification (onglet Auth)Méthodes d'authentification❌—Liaison de credentials Ecosystem avec un alias pour les utiliser dans le code.

Onglet Authentification​

Le nœud Code propose un onglet Auth pour déclarer des méthodes d'authentification utilisables dans votre script :

  1. Ajoutez un ou plusieurs credentials (Basic Auth, OAuth 2, API Key, clé privée, Custom).
  2. Attribuez à chacun un alias unique (ex. mon_oauth, api_externe).
  3. Utilisez l'API libs.ecosystemCredentials dans le code (voir ci-dessous).

Les alias déclarés dans l'onglet Auth sont les seuls accessibles à l'exécution.

API libs.ecosystemCredentials​

// OAuth 2, Basic Auth, Custom (token)
const credentials = libs.ecosystemCredentials.get("mon_oauth");
const token = credentials.getToken();

// API Key (headers et/ou query params)
const apiKey = libs.ecosystemCredentials.get("api_externe");
const headers = apiKey.getHeaders();
const queryParams = apiKey.getQueryParams();
MéthodeTypes de credentialDescription
getToken()OAuth 2, Basic Auth, CustomRetourne le jeton d'accès résolu
getHeaders()API KeyRetourne les en-têtes configurés
getQueryParams()API KeyRetourne les paramètres de requête configurés

Si l'alias n'est pas déclaré dans l'onglet Auth, le nœud échoue avec un message explicite listant les alias disponibles.

Voir aussi : Types de méthodes d'authentification · Créer une méthode d'authentification

Code JavaScript​

Écrivez votre code JavaScript dans l'éditeur :

  • Accès au contexte via l'objet context
  • Retournez le résultat avec return
  • Utilisez les fonctions JavaScript standard
Éditeur de code

Le nœud Code propose un mode plein écran pour développer vos scripts sur toute la hauteur de l’écran. Les lignes d’en-tête de l’éditeur restent visibles pendant le défilement du code (sticky scroll).

Structure de base​

// Accéder aux données du contexte
const inputData = context.data;

// Traitement
const processedData = {
// Votre logique ici
};

// Retourner le résultat
return processedData;

Librairies disponibles​

Des librairies JavaScript sont mises à disposition dans l'objet libs.

Exemple d'utilisation :

// Générer un UUID
context.yId = libs.uuid();

// Manipuler des dates
const now = libs.dayjs().format("YYYY-MM-DD");

// Calculer un hash MD5
const hash = libs.md5("my-string");

Liste des librairies​

LibrairieDescription
adm-zipManipulation des fichiers ZIP.
ajvValidateur de schéma JSON.
axiosClient HTTP basé sur les Promises.
base64Encodeur/décodeur Base64.
cheerioImplémentation du cœur de jQuery pour le serveur.
convertUnitsConversion et manipulation d'unités.
cryptoModule cryptographique natif de Node.js.
dayjsManipulation des dates.
escapeHtmlÉchappe les caractères HTML dans une chaîne.
fastcsvParsing de fichiers CSV.
fileRetourne un FILE_TOKEN+key.
google.authLibrary.JWTClient JWT pour Google OAuth2.
google.PubSubClient pour Google Cloud Pub/Sub.
google.sheetsV4API Google Sheets v4.
js2xmlConversion de JavaScript (JS) en XML.
json2xmlConversion de JSON en XML.
JSONWebTokenCrée et vérifie des JSON Web Tokens (JWT).
lodashUtilitaires JavaScript.
md5Calcule le hash MD5 d'une chaîne de caractères.
oauth1Autorisation de requêtes avec OAuth 1.0a.
turndownTransforme du HTML en Markdown.
utf8Encodeur/décodeur UTF-8.
uuidGénère un UUID v4 aléatoire.
info

Les exemples ci-dessus (libs.uuid(), libs.dayjs(), libs.md5()) illustrent quelques usages courants ; chaque librairie de la liste s'utilise de la même façon via l'objet libs.

Fonctions disponibles​

Fonctions JavaScript standard​

Toutes les fonctions JavaScript sont disponibles :

  • JSON.parse(), JSON.stringify()
  • Array.map(), Array.filter(), Array.reduce()
  • String.split(), String.replace()
  • Date, Math, etc.

Exemples​

// Corps de requête : objet ou chaîne JSON selon le cas
const order =
typeof context.data === "string" ? JSON.parse(context.data) : context.data;

// Manipulation de tableaux
const activeItems = context.items.filter((item) => item.active);

// Formatage de dates
const date = new Date(context.timestamp);
const formattedDate = date.toISOString();

// Calculs
const average =
context.numbers.reduce((a, b) => a + b) / context.numbers.length;

Entrée​

Le nœud reçoit le contexte du flux, qui contient toutes les données des nœuds précédents :

// Données du déclencheur (voir aussi [Nœud Déclencheur](./trigger-node.md))
context.data;
context.incomingRequest.headers;
context.incomingRequest.query;

// Résultats des nœuds précédents
context.lastResponse.data;
context.condition.result;
context.forEach.item;

// Variables globales
context.variables.myVariable;

Exemple d'utilisation​

// Récupérer les données
const order = context.data;
const user = context.lastResponse.data;

// Traitement
const total = order.items.reduce((sum, item) => {
return sum + item.price * item.quantity;
}, 0);

const discount = user.plan === "premium" ? total * 0.1 : 0;
const finalTotal = total - discount;

// Retourner le résultat
return {
orderId: order.id,
total: finalTotal,
discount: discount,
items: order.items,
};

Sortie​

Le nœud retourne le résultat du script via l'instruction return. Ce résultat est injecté dans le contexte et reste accessible aux nœuds suivants — les résultats des nœuds précédents sont notamment lus via context.lastResponse.data.

Retour simple​

return {
success: true,
data: processedData,
};

Retour conditionnel​

if (condition) {
return { status: "approved" };
} else {
return { status: "rejected" };
}

Vous pouvez aussi écrire directement dans le contexte, par exemple context.yId = libs.uuid() (voir Librairies disponibles).

Erreurs​

  • Alias d'authentification absent — si l'alias n'est pas déclaré dans l'onglet Auth, le nœud échoue avec un message explicite listant les alias disponibles.
  • Exception JavaScript — une erreur levée dans le script (via throw) est transmise au nœud On Error.

Try/Catch​

Utilisez try/catch pour gérer les erreurs :

try {
const result = processData(context.data);
return result;
} catch (error) {
// L'erreur sera gérée par le nœud On Error
throw error;
}

Validation​

Validez les données avant traitement :

if (!context.data || !context.data.orderId) {
throw new Error("Order ID is required");
}

// Traitement...

Limites​

  • Temps d'exécution : le code doit s'exécuter rapidement.
  • Mémoire : évitez les opérations consommant beaucoup de mémoire.
  • APIs externes : utilisez des nœuds Requête HTTP(S) pour les appels API.
  • Fichiers : utilisez les nœuds FTP pour les opérations sur fichiers.

Exemple​

Exemple 1 : Transformation de données​

const input = context.data;

const transformed = {
id: input.order_id,
customer: {
name: `${input.first_name} ${input.last_name}`,
email: input.email_address,
},
items: input.products.map((product) => ({
sku: product.product_sku,
quantity: product.qty,
price: product.price,
})),
};

return transformed;

Exemple 2 : Calcul complexe​

const order = context.data;

// Calcul du total
const subtotal = order.items.reduce((sum, item) => {
return sum + item.price * item.quantity;
}, 0);

// Calcul des taxes
const taxRate = 0.2; // 20%
const tax = subtotal * taxRate;

// Calcul des frais de livraison
const shipping = order.shippingMethod === "express" ? 15 : 5;

// Total final
const total = subtotal + tax + shipping;

return {
subtotal: subtotal,
tax: tax,
shipping: shipping,
total: total,
};

Exemple 3 : Validation et transformation​

const data = context.data;

// Validation
if (!data.email || !data.email.includes("@")) {
throw new Error("Invalid email address");
}

// Transformation
const normalized = {
email: data.email.toLowerCase().trim(),
name: data.name.trim(),
age: parseInt(data.age, 10),
};

// Validation de l'âge
if (isNaN(normalized.age) || normalized.age < 0) {
throw new Error("Invalid age");
}

return normalized;

Voir aussi​