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ètre | Type | Obligatoire | Défaut | Description |
|---|---|---|---|---|
| App | App | ❌ | — | Application associée au nœud. |
| Code JavaScript | JavaScript | ✅ | — | 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 :
- Ajoutez un ou plusieurs credentials (Basic Auth, OAuth 2, API Key, clé privée, Custom).
- Attribuez à chacun un alias unique (ex.
mon_oauth,api_externe). - Utilisez l'API
libs.ecosystemCredentialsdans 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éthode | Types de credential | Description |
|---|---|---|
getToken() | OAuth 2, Basic Auth, Custom | Retourne le jeton d'accès résolu |
getHeaders() | API Key | Retourne les en-têtes configurés |
getQueryParams() | API Key | Retourne 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
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
| Librairie | Description |
|---|---|
adm-zip | Manipulation des fichiers ZIP. |
ajv | Validateur de schéma JSON. |
axios | Client HTTP basé sur les Promises. |
base64 | Encodeur/décodeur Base64. |
cheerio | Implémentation du cœur de jQuery pour le serveur. |
convertUnits | Conversion et manipulation d'unités. |
crypto | Module cryptographique natif de Node.js. |
dayjs | Manipulation des dates. |
escapeHtml | Échappe les caractères HTML dans une chaîne. |
fastcsv | Parsing de fichiers CSV. |
file | Retourne un FILE_TOKEN+key. |
google.authLibrary.JWT | Client JWT pour Google OAuth2. |
google.PubSub | Client pour Google Cloud Pub/Sub. |
google.sheetsV4 | API Google Sheets v4. |
js2xml | Conversion de JavaScript (JS) en XML. |
json2xml | Conversion de JSON en XML. |
JSONWebToken | Crée et vérifie des JSON Web Tokens (JWT). |
lodash | Utilitaires JavaScript. |
md5 | Calcule le hash MD5 d'une chaîne de caractères. |
oauth1 | Autorisation de requêtes avec OAuth 1.0a. |
turndown | Transforme du HTML en Markdown. |
utf8 | Encodeur/décodeur UTF-8. |
uuid | Génère un UUID v4 aléatoire. |
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;