Aller au contenu principal
Article10 min10 avril 2026

Top 10 expressions JavaScript n8n : boostez vos workflows

Illustration de l'article : Top 10 expressions JavaScript n8n : boostez vos workflows

Une expression JavaScript dans n8n est un fragment de code inséré entre doubles accolades {{ }}, évalué dynamiquement à chaque exécution d’un workflow. Elle permet de manipuler, transformer ou router des données sans écrire un script complet. Concrètement, chaque champ de configuration d’un node accepte ces expressions, ce qui rend chaque étape d’un workflow adaptable au contexte réel des données traitées.

La variable la plus utilisée est $json : elle donne accès directement aux données JSON transmises par le node précédent. Pour cibler un node spécifique situé plus haut dans le workflow, la syntaxe $node["nom_du_nœud"].json fait le travail. Ces mécanismes transforment n8n d’un simple outil de connexion d’API en une plateforme d’automatisation capable de logique métier fine.

Pourquoi maîtriser ces expressions fait gagner du temps

Sans expression, un workflow n8n se limite à déplacer des données d’un service à un autre. Avec elles, il devient possible de nettoyer des champs, appliquer des conditions, formater des dates ou calculer des montants — le tout sans node supplémentaire. Le gain se mesure en nodes économisés, en lisibilité du workflow et en maintenance réduite.

L’éditeur d’expressions intégré à n8n propose l’autocomplétion, la prévisualisation en temps réel et la coloration syntaxique. Ces fonctionnalités réduisent considérablement le risque d’erreur, même pour des utilisateurs dont le JavaScript n’est pas le langage principal.

Syntaxe et fondamentaux des expressions n8n

La syntaxe en pratique : ce qu’il faut retenir

Toute expression s’écrit entre {{ }}. Le contenu est interprété comme du JavaScript standard. On peut y placer une simple référence à un champ ({{ $json.email }}) comme une opération complexe impliquant des méthodes chaînées. La seule contrainte : l’expression doit retourner une valeur unique.

n8n met à disposition plusieurs variables natives qui élargissent le champ des possibles :

  • $now — l’heure actuelle sous forme d’objet Luxon DateTime
  • $today — le début du jour courant (minuit)
  • $workflow.id et $workflow.name — les métadonnées du workflow en cours
  • $execution.id et $execution.mode — les informations sur l’exécution active
  • $itemIndex — l’index de l’élément en cours de traitement dans un lot

Ces variables sont injectées automatiquement. Aucune importation n’est nécessaire, y compris pour Luxon, la librairie de gestion de dates qui est pré-chargée dans l’environnement n8n.

Types de données : les bases à connaître

Les données qui transitent dans un workflow n8n sont structurées en JSON. Chaque item est un objet avec des propriétés qui peuvent être des chaînes, des nombres, des booléens, des tableaux ou d’autres objets imbriqués. Une expression doit toujours tenir compte du type de la donnée ciblée : appeler .split() sur un nombre provoque une erreur silencieuse.

Le chaînage optionnel ?. et la coalescence nullish ?? sont deux opérateurs JavaScript modernes particulièrement utiles dans n8n. Le premier évite les crashs quand une propriété n’existe pas ($json.adresse?.ville). Le second fournit une valeur de repli quand un champ est null ou undefined ($json.description ?? 'Non renseigné').

Les 10 meilleures expressions JavaScript pour vos workflows n8n

Accéder aux données d’autres nodes

1. Référencer un node distant : {{ $node["HTTP Request"].json.results[0].name }}. Cette expression va chercher la première entrée du tableau results renvoyé par un node HTTP Request situé ailleurs dans le workflow. Elle évite de multiplier les nodes intermédiaires pour faire transiter une donnée.

2. Utiliser l’index de l’item courant : {{ $itemIndex }}. Dans un traitement par lot, cette variable permet de numéroter les éléments, de créer des identifiants séquentiels ou de conditionner un traitement selon la position de l’item dans la liste.

Transformer et adapter les données

3. Nettoyer un numéro de téléphone : {{ $json.telephone.replace(/[^0-9]/g, '') }}. Les données issues de formulaires ou de CRM contiennent souvent des espaces, des tirets ou des parenthèses dans les numéros. Cette expression ne conserve que les chiffres, en une seule ligne.

4. Extraire un prénom depuis un nom complet : {{ $json.nom_complet.split(' ')[0] }}. .split(' ') découpe la chaîne sur les espaces et [0] isole le premier segment. Utile pour personnaliser un e-mail automatique sans disposer de champs séparés.

5. Fournir une valeur par défaut : {{ $json.description ?? 'Description non disponible' }}. L’opérateur ?? n’entre en jeu que si la valeur est strictement null ou undefined, ce qui le rend plus fiable que || (qui considère aussi 0 et la chaîne vide comme fausses).

6. Appliquer une remise conditionnelle : {{ $json.montant_total > 500 ? $json.montant_total * 0.9 : $json.montant_total }}. L’opérateur ternaire remplace ici un node IF complet. Au-delà de 500 €, le montant est réduit de 10 %. En dessous, il reste inchangé.

Maîtriser tableaux, objets et dates

7. Filtrer un tableau : {{ $json.commandes.filter(c => c.statut === 'payée') }}. .filter() retourne un nouveau tableau contenant uniquement les éléments qui satisfont la condition. C’est l’expression de référence pour segmenter des données sans toucher au flux principal du workflow.

8. Transformer un tableau avec map : {{ $json.produits.map(p => p.nom.toUpperCase()) }}. .map() applique une transformation à chaque élément et renvoie un nouveau tableau. Ici, tous les noms de produits passent en majuscules — pratique pour harmoniser des données provenant de sources hétérogènes.

9. Formater une date avec Luxon : {{ $now.toFormat('dd/MM/yyyy') }}. Luxon étant pré-chargée, cette expression fonctionne directement. Pour calculer une date future, la syntaxe {{ $now.plus({ days: 7 }).toFormat('yyyy-MM-dd') }} ajoute sept jours et formate le résultat au standard ISO.

10. Générer un identifiant unique : {{ Date.now().toString(36) + Math.random().toString(36).substr(2) }}. Cette expression combine le timestamp actuel converti en base 36 avec une portion aléatoire. Le résultat est un ID court, lisible et suffisamment unique pour la plupart des scénarios d’automatisation (logs, clés temporaires, nommage de fichiers).

Scénarios concrets : ces expressions en action

Automatisations courantes avec des expressions personnalisées

Un workflow de qualification de leads peut utiliser l’opérateur ternaire pour attribuer un score en fonction du chiffre d’affaires déclaré, puis .filter() pour n’envoyer au CRM que les leads dépassant un seuil. Le tout se fait en deux nodes au lieu de cinq, et la logique reste lisible dans chaque champ d’expression.

Un autre cas fréquent : la synchronisation de catalogues produits entre une base Airtable et un site e-commerce. .map() reformate les prix, .replace() normalise les SKU, et $json.stock ?? 0 garantit qu’un produit sans stock déclaré n’affichera pas null côté front-end.

Recettes réutilisables pour accélérer vos projets

Certaines expressions reviennent dans presque tous les workflows. En voici trois à conserver :

  1. Nettoyage d’e-mail : {{ $json.email.trim().toLowerCase() }} — supprime les espaces parasites et uniformise la casse.
  2. Concaténation conditionnelle : {{ $json.prenom + ($json.nom ? ' ' + $json.nom : '') }} — construit un nom complet uniquement si le nom de famille existe.
  3. Arrondi monétaire : {{ Math.round($json.prix * 100) / 100 }} — évite les problèmes classiques de virgule flottante en JavaScript.

Stocker ces recettes dans un document partagé ou dans un workflow template n8n fait gagner un temps significatif dès qu’une équipe travaille sur plusieurs automatisations en parallèle. Pour découvrir des exemples concrets de workflows n8n, il est utile de parcourir des cas réels documentés et commentés.

Déboguer et fiabiliser vos expressions

Résoudre les problèmes fréquents

L’erreur la plus courante est le Cannot read property of undefined. Elle survient quand un champ attendu n’existe pas dans les données entrantes. Le chaînage optionnel ?. couplé à ?? élimine la majorité de ces cas. Tester systématiquement l’existence d’une propriété avant d’y appliquer une méthode est un réflexe qui évite les workflows interrompus en production.

La fonction console.log() est utilisable dans les expressions n8n : les résultats apparaissent dans l’historique d’exécution. C’est un outil de débogage rapide pour inspecter la structure réelle des données à un point précis du workflow, sans ajouter de node dédié.

L’éditeur d’expressions affiche le résultat en temps réel. Avant de lancer une exécution complète, il suffit de cliquer sur le champ d’expression, d’y écrire le code et de vérifier que la prévisualisation retourne la valeur attendue. Ce réflexe divise par deux le nombre d’exécutions de test nécessaires.

Pratiques recommandées pour des expressions fiables

Garder les expressions courtes et lisibles reste la meilleure protection contre les bugs. Au-delà de trois opérations chaînées, il vaut mieux basculer vers un node Code, qui offre un environnement complet avec gestion d’erreurs, variables intermédiaires et commentaires. Pour aller plus loin, des techniques avancées pour expressions JavaScript permettent d’affiner encore la logique et la robustesse de vos automatisations.

Nommer les nodes de manière explicite (Nettoyage_Email plutôt que Set) rend les références inter-nodes compréhensibles dans les expressions. Un workflow où l’on écrit $node["Nettoyage_Email"].json.email se maintient bien mieux qu’un enchaînement de $node["Set3"].json.field1.

Valider les types en amont du workflow — via un node IF ou un Set qui force le typage — empêche les erreurs de propagation. Une donnée censée être un nombre mais reçue comme chaîne ("42" au lieu de 42) peut fausser un calcul sans déclencher d’erreur visible.

Questions fréquentes sur les expressions JavaScript dans n8n

Qu’est-ce qu’une expression JavaScript et comment l’utiliser dans n8n ?

C’est un fragment de code JavaScript inséré entre {{ }} dans n’importe quel champ de configuration d’un node n8n. Elle est évaluée dynamiquement à chaque exécution. Pour l’utiliser, il suffit de cliquer sur un champ, d’activer le mode expression (icône engrenage) et de taper le code. La prévisualisation s’affiche immédiatement.

Quelles sont les erreurs fréquentes lors de l’écriture d’expressions ?

Les trois erreurs les plus rencontrées : accéder à une propriété inexistante (résolu avec ?.), confondre || et ?? pour les valeurs par défaut, et oublier que les données arrivent parfois sous forme de chaîne alors qu’un nombre est attendu. Ajouter un Number() explicite ou un parseInt() suffit dans ce dernier cas.

Comment tester et valider mes expressions avant de les utiliser ?

L’éditeur d’expressions de n8n offre une prévisualisation en temps réel sur les données de la dernière exécution. Pour des tests plus poussés, la console JavaScript du navigateur ou un outil comme RunJS permettent de simuler des données et de vérifier le comportement d’une expression hors contexte. console.log() dans un node Code donne aussi un aperçu des données intermédiaires dans l’historique d’exécution.

Faut-il être expert en JavaScript pour exploiter n8n efficacement ?

Non. Les dix expressions listées dans cet article couvrent la grande majorité des besoins courants et ne mobilisent que des notions de base : accès aux propriétés, méthodes de chaîne, opérateurs ternaires et méthodes de tableau. La documentation officielle et l’autocomplétion de l’éditeur compensent largement un niveau JavaScript intermédiaire. n8n fait partie des outils d’automatisation open source les plus accessibles aux profils non développeurs.

Où approfondir ses connaissances sur n8n et ses expressions ?

La documentation officielle de n8n détaille chaque variable native, chaque méthode disponible et propose des exemples par type de node. Le forum communautaire n8n regorge également de workflows partagés avec des expressions commentées, ce qui constitue une ressource d’apprentissage concrète.

Pour aller plus loin, le meilleur investissement consiste à construire un workflow de test dédié — un simple trigger manuel connecté à un node Set — dans lequel vous expérimentez chaque expression avant de l’intégrer à un workflow de production. Vous pouvez également explorer l’installation et sécurité des Community Nodes pour étendre les capacités natives de votre environnement n8n.

Récapitulatif

# Expression Usage principal Exemple
1 Référence node distant Accéder aux données d’un autre node `$node[« HTTP Request »].json.results[0].name`
2 `$itemIndex` Identifier la position d’un item dans un lot `{{ $itemIndex }}`
3 `.replace()` avec regex Nettoyer un numéro de téléphone `$json.telephone.replace(/[^0-9]/g,  »)`
4 `.split()` Extraire un prénom `$json.nom_complet.split(‘ ‘)[0]`
5 `??` (coalescence nullish) Fournir une valeur par défaut `$json.description ?? ‘Non disponible’`
6 Opérateur ternaire `? :` Appliquer une condition (remise) `$json.montant > 500 ? montant * 0.9 : montant`
7 `.filter()` Filtrer un tableau selon un critère `$json.commandes.filter(c => c.statut === ‘payée’)`
8 `.map()` Transformer chaque élément d’un tableau `$json.produits.map(p => p.nom.toUpperCase())`
9 `$now.toFormat()` Formater une date avec Luxon `$now.toFormat(‘dd/MM/yyyy’)`
10 Génération d’ID unique Créer un identifiant court `Date.now().toString(36) + Math.random().toString(36).substr(2)`

Besoin d'aide pour automatiser vos processus ?

Réservez un appel découverte gratuit pour discuter de votre projet d'automatisation

Réserver un appel

Autres articles qui pourraient vous intéresser