Apprendre les bases des nœuds de code (JavaScript) par un tutoriel interactif pratique

Intermédiaire

Ceci est unMiscellaneousworkflow d'automatisation du domainecontenant 12 nœuds.Utilise principalement des nœuds comme Set, Code, SplitOut, ManualTrigger. Apprendre les bases des nœuds de code (JavaScript) par le biais de tutoriels interactifs et pratiques

Prérequis
  • Aucun prérequis spécial, prêt à l'emploi après importation

Catégorie

Aperçu du workflow
Visualisation des connexions entre les nœuds, avec support du zoom et du déplacement
Exporter le workflow
Copiez la configuration JSON suivante dans n8n pour importer et utiliser ce workflow
{
  "meta": {
    "instanceId": "e409ea34548a2afe2dffba31130cd1cf2e98ebe2afaeed2a63caf2a0582d1da0"
  },
  "nodes": [
    {
      "id": "e36b580a-9314-453c-88d6-7ffb948e79a8",
      "name": "1. Données d'exemple",
      "type": "n8n-nodes-base.set",
      "position": [
        500,
        480
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "38ce3db6-ce1d-4091-9645-39e674ad1782",
              "name": "users",
              "type": "array",
              "value": "=[{\"firstName\":\"Alice\",\"lastName\":\"Smith\",\"birthDate\":\"1990-05-15\"},{\"firstName\":\"Bob\",\"lastName\":\"Jones\",\"birthDate\":\"1985-11-22\"},{\"firstName\":\"Charlie\",\"lastName\":\"Brown\",\"birthDate\":\"2001-02-10\"}, {\"firstName\":\"Alex\",\"lastName\":\"Garcia\",\"birthDate\":\"1995-07-30\"}]"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d77a1d9a-376a-451c-9fc3-174a60fb787a",
      "name": "2. Séparer les utilisateurs",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        720,
        480
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "users"
      },
      "typeVersion": 1
    },
    {
      "id": "39ab2c6f-11ce-4e1e-a6c7-327d758f6d0c",
      "name": "3. Traiter chaque utilisateur",
      "type": "n8n-nodes-base.code",
      "position": [
        1040,
        480
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// This code runs for EACH user individually.\n\n// 1. Get the data for the current item\nconst user = $input.item.json;\n\n// 2. Perform operations\nconst fullName = `${user.firstName} ${user.lastName}`;\n\nconst birthDate = new Date(user.birthDate);\nconst ageDiffMs = Date.now() - birthDate.getTime();\nconst ageDate = new Date(ageDiffMs);\nconst age = Math.abs(ageDate.getUTCFullYear() - 1970);\n\nconsole.log(`Processing user: ${fullName}, Age: ${age}`);\n\n// 3. Return the new data, keeping the original fields\nreturn {\n  ...user, // This keeps the original data (firstName, lastName, etc.)\n  fullName: fullName,\n  age: age\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "9f4aa08e-f15f-4215-843c-87997e6d6cff",
      "name": "5. Calculer l'âge moyen",
      "type": "n8n-nodes-base.code",
      "position": [
        1840,
        480
      ],
      "parameters": {
        "jsCode": "// This code runs only ONCE for ALL users.\n\n// 1. Get all items from the previous node\nconst allUsers = $items();\n\n// 2. Perform an aggregation\nconst totalAge = allUsers.reduce((sum, item) => {\n  return sum + item.json.age;\n}, 0);\n\nconst userCount = allUsers.length;\nconst averageAge = totalAge / userCount;\n\nconsole.log(`Calculated average age for ${userCount} users.`);\n\n// 3. Return a single new item with the result\nreturn [\n  {\n    json: {\n      totalUsers: userCount,\n      averageAge: parseFloat(averageAge.toFixed(2)) // Format to 2 decimal places\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "2e7f0710-0b4a-450e-8e87-591c5324f5c7",
      "name": "4. Récupérer des données externes (Avancé)",
      "type": "n8n-nodes-base.code",
      "position": [
        1440,
        480
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "// ADVANCED: This code calls an external API for each user.\n\n// 1. Get the data for the current item\nconst user = $input.item.json;\n\n// 2. Use a helper function to make an HTTP request\n// We'll use a free API to guess the gender based on the first name.\nconst url = `https://api.genderize.io?name=${user.firstName}`;\n\nconsole.log(`Fetching external data for ${user.firstName} from ${url}`)\n\n// this.helpers.httpRequest is a powerful built-in function.\n// We use 'await' because it's an asynchronous operation.\nconst response = await this.helpers.httpRequest({ url: url, json: true });\n\n// 3. Return the original data merged with the new API data\nreturn {\n  ...user, // Keep all existing data (fullName, age, etc.)\n  gender: response.gender,\n  genderProbability: response.probability\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "809e91c4-02b6-4d12-b8f0-e9cd96d92c24",
      "name": "Note adhésive",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        440,
        240
      ],
      "parameters": {
        "color": 5,
        "width": 440,
        "height": 420,
        "content": "#### ▶️ STARTING POINT: Sample Data\n\nThese nodes prepare our data for the tutorial.\n\n1.  **`1. Sample Data`**: Creates a list of users. Feel free to edit the values here to experiment!\n2.  **`2. Split Out Users`**: Splits the list into multiple items, one for each user. This is necessary so the next Code nodes can process them one by one."
      },
      "typeVersion": 1
    },
    {
      "id": "bc8ec047-8595-4a07-8422-09779f8490c0",
      "name": "Note adhésive1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        900,
        80
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 580,
        "content": "#### ⚙️ LESSON 1: Processing Each Item\n\nThis node is in **\"Run Once for Each Item\"** mode. It executes once for every user.\n\n**Goal:** Enrich each user's data.\n\n**Key Concepts:**\n*   `$input.item.json`: Accesses the data of the *current* item being processed.\n*   `return { ... }`: Returns an object that becomes the new output for the item. The `...user` trick keeps the original data.\n\n\nRun the workflow and check this node's output: you'll see multiple items, each with a new `fullName` and `age`."
      },
      "typeVersion": 1
    },
    {
      "id": "acd0b48a-ca88-4dae-ab19-b91db5050e8b",
      "name": "Note adhésive2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1300,
        60
      ],
      "parameters": {
        "color": 6,
        "width": 380,
        "height": 600,
        "content": "#### 🚀 ADVANCED LESSON 2: Using Helpers\n\nThis node also runs for each item, but demonstrates a powerful, advanced feature.\n\n**Goal:** Enrich data by calling an external API from code.\n\n**Key Concepts:**\n*   `this.helpers.httpRequest`: A built-in function to make API calls directly. This is great for dynamic URLs or when you need to add logic before or after the call.\n*   `await`: We use this because making an API call is an *asynchronous* operation.\n\n\nCheck the output: each user now has `gender` data fetched from the web!"
      },
      "typeVersion": 1
    },
    {
      "id": "da000098-d03f-40a9-b017-fab8223a6afc",
      "name": "Note adhésive3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1700,
        80
      ],
      "parameters": {
        "color": 7,
        "width": 380,
        "height": 580,
        "content": "#### ⚙️ LESSON 3: Processing All Items at Once\n\nThis node is in **\"Run Once for All Items\"** mode. It runs only once and sees all items at the same time.\n\n**Goal:** Aggregate data to create a summary.\n\n**Key Concepts:**\n*   `$items()`: Returns an **array** of all items from the previous node.\n*   `return [ { json: { ... } } ]`: Returns an array containing a single new item with the final result.\n\n\nCheck this node's output: there is only one item containing the total user count and their average age."
      },
      "typeVersion": 1
    },
    {
      "id": "5c84ce9f-32d0-4222-9b1a-3887677bdabe",
      "name": "6. Créer un fichier binaire (Expert)",
      "type": "n8n-nodes-base.code",
      "position": [
        2240,
        480
      ],
      "parameters": {
        "jsCode": "// LESSON 4 (EXPERT): Creating a binary file.\n\n// This node runs only ONCE for ALL items.\n\n// 1. Get all items from the previous node\nconst allUsers = $(\"4. Fetch External Data (Advanced)\").all();\n\n// 2. Create a CSV string from the data\nlet csvContent = \"FullName,Age,GenderGuess,ProcessedBy\\n\"; // CSV Header\n\nfor (const item of allUsers) {\n  const user = item.json;\n  const row = `\"${user.fullName}\",${user.age},${user.gender},n8n`;\n  csvContent += row + \"\\n\";\n}\n\n// 3. Use a helper to create a binary file from the string\nconst binaryData = await this.helpers.prepareBinaryData(Buffer.from(csvContent), 'user_report.csv');\n\n// 4. Return a new item containing the binary data\nreturn [\n  {\n    json: {\n      reportGenerated: new Date().toISOString(),\n      userCount: allUsers.length\n    },\n    binary: {\n      'report': binaryData\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "498b1bf2-1ced-4343-b459-9b6226fa8c46",
      "name": "Note adhésive4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2100,
        80
      ],
      "parameters": {
        "color": 3,
        "width": 380,
        "height": 580,
        "content": "#### 📄 EXPERT LESSON 4: Creating Files\n\n**Goal:** Aggregate all items and generate a binary file (like a CSV in that case).\n**Mode:** `Run Once for All Items`\n\n**Key Concepts:**\n*   `$(\"4. Fetch External Data (Advanced)\").all()`: Gets an array of ALL items from the 4th step.\n*   `this.helpers.prepareBinaryData`: Converts raw data (like a text string) into a proper binary file that n8n can use.\n*   `Buffer`: A standard way to handle binary data in JavaScript."
      },
      "typeVersion": 1
    },
    {
      "id": "c97edb6b-77ac-48ea-8e00-507770cc6373",
      "name": "Démarrer le tutoriel",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        220,
        480
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "pinData": {},
  "connections": {
    "e36b580a-9314-453c-88d6-7ffb948e79a8": {
      "main": [
        [
          {
            "node": "d77a1d9a-376a-451c-9fc3-174a60fb787a",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "c97edb6b-77ac-48ea-8e00-507770cc6373": {
      "main": [
        [
          {
            "node": "e36b580a-9314-453c-88d6-7ffb948e79a8",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "d77a1d9a-376a-451c-9fc3-174a60fb787a": {
      "main": [
        [
          {
            "node": "39ab2c6f-11ce-4e1e-a6c7-327d758f6d0c",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "39ab2c6f-11ce-4e1e-a6c7-327d758f6d0c": {
      "main": [
        [
          {
            "node": "2e7f0710-0b4a-450e-8e87-591c5324f5c7",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "9f4aa08e-f15f-4215-843c-87997e6d6cff": {
      "main": [
        [
          {
            "node": "5c84ce9f-32d0-4222-9b1a-3887677bdabe",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "2e7f0710-0b4a-450e-8e87-591c5324f5c7": {
      "main": [
        [
          {
            "node": "9f4aa08e-f15f-4215-843c-87997e6d6cff",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Foire aux questions

Comment utiliser ce workflow ?

Copiez le code de configuration JSON ci-dessus, créez un nouveau workflow dans votre instance n8n et sélectionnez "Importer depuis le JSON", collez la configuration et modifiez les paramètres d'authentification selon vos besoins.

Dans quelles scénarios ce workflow est-il adapté ?

Intermédiaire - Divers

Est-ce payant ?

Ce workflow est entièrement gratuit et peut être utilisé directement. Veuillez noter que les services tiers utilisés dans le workflow (comme l'API OpenAI) peuvent nécessiter un paiement de votre part.

Informations sur le workflow
Niveau de difficulté
Intermédiaire
Nombre de nœuds12
Catégorie1
Types de nœuds5
Description de la difficulté

Adapté aux utilisateurs expérimentés, avec des workflows de complexité moyenne contenant 6-15 nœuds

Auteur
Lucas Peyrin

Lucas Peyrin

@lucaspeyrin

Innovative builder with a passion for crafting automation solutions that solve real-world challenges. From streamlining workflows to driving efficiency, my work empowers teams and individuals to achieve more with less effort. Experienced in developing scalable tools and strategies that deliver results with n8n, supabase and cline.

Liens externes
Voir sur n8n.io

Partager ce workflow

Catégories

Catégories: 34