n8n Code Node JavaScript: посібник з дебагінгу
Посібник з n8n Code Node JavaScript: режими виконання, доступ до даних, асинхронний код, дебагінг console.log та зв'язування елементів у продакшені.

Перевірено за наведеними джерелами .
Початок роботи з n8n Code Node JavaScript
Добре написаний скрипт у середовищі n8n Code node JavaScript може замінити кілька звичайних нод усього кількома рядками логіки, але дрібні помилки в тому, як підраховуються чи повертаються елементи, легко пропустити, доки workflow не запрацює на реальних даних. Цей посібник розглядає налаштування Code node, вибір правильного режиму виконання, безпечне читання даних елементів, роботу з асинхронним кодом і дебагінг через console.log — а також те, що змінюється, коли той самий скрипт починає працювати з продакшн-даними API.
Щоб виконати цей посібник, вам потрібен наявний workflow n8n щонайменше з однією нодою, яка видає приклад даних, а також Code node, розташована після неї та налаштована на роботу в режимі JavaScript, а не Python. Цей посібник передбачає базову обізнаність із додаванням нод на полотно й розглядає це як звичайну навігацію, а не крок дебагінгу. Мета нижче — невеликий скрипт, який зчитує вхідні дані елементів, трансформує їх і логує власний прогрес — спочатку на одному прикладному елементі, а потім на реалістичній відповіді з кількома елементами.
Виберіть режим виконання та отримайте доступ до даних елементів

Code node пропонує два режими виконання. Run Once for All Items — це режим за замовчуванням: скрипт запускається один раз незалежно від того, скільки елементів надходить, тому йому потрібно самостійно проходити циклом по вхідних даних. Run Once for Each Item натомість запускає скрипт окремо для кожного елемента, що простіше осмислити, доки скрипт ще невеликий.
- Виберіть режим виконання: Run Once for All Items або Run Once for Each Item.
- Отримайте доступ до даних елементів за допомогою $json, $input.item, $input.all() або посилання на попередню ноду.
- Обробляйте синхронний або асинхронний код, повертаючи Promise за потреби.
- Дебажте за допомогою console.log, доки скрипт ще невеликий.
Усередині скрипту $json — це скорочення для JSON-даних поточного вхідного елемента, а $input.item явно повертає той самий поточний елемент. $input.all() повертає всі вхідні елементи у вигляді масиву — саме по ньому проходить циклом скрипт у режимі Run Once for All Items. Коли скрипту потрібне поле не з безпосереднього входу, а з попередньої ноди, $('Node Name').item.json напряму отримує дані пов'язаного елемента.
| Скорочення | Повертає | Типове використання |
|---|---|---|
| $json | JSON поточного вхідного елемента | Швидке читання в Run Once for Each Item |
| $input.item | Елемент, що обробляється зараз | Явний еквівалент $json |
| $input.all() | Масив усіх вхідних елементів | Цикл у Run Once for All Items |
| $('Node Name').item.json | JSON пов'язаного елемента з попередньої ноди | Отримання поля, якого немає в поточному елементі |
Sources: Using the Code node | Build | n8n Docs, Reference previous nodes | Build | n8n Docs, Nodeinputdata | Build | n8n Docs
Робота з асинхронним кодом та дебагінг через console.log
Більшість коротких скриптів трансформації є синхронними, але Code node також підтримує асинхронний JavaScript: замість того щоб повертати елементи напряму, скрипт може повернути Promise, який n8n дочекається та розв'яже, перш ніж передати дані далі. Це стає важливим, коли n8n Code node JavaScript потрібно чекати завершення операції, а не миттєво обчислювати результат.
Для дебагінгу офіційна документація n8n називає console.log підтримуваним способом виводу в консоль зсередини Code node, корисним для перевірки значення чи підтвердження того, що крок трансформації відпрацював. Ентоні Сідашин (Anthony Sidashin), розробник, який писав про використання n8n з точки зору розробника, описав цю поведінку на основі власного практичного досвіду роботи з Code node.
Sources: Using the Code node | Build | n8n Docs, My experience using n8n, from a developer perspective
Очікувані результати та усунення типових помилок Code node
Після запуску ноди на прикладному елементі панель виводу має показати один або кілька елементів, кожен з яких має ключ json, — це відповідає тому, як n8n передає дані між нодами у вигляді масиву об'єктів, обгорнутих у json. Якщо значення, яке повертає скрипт, не відповідає цій формі — або не повертає нічого — нода видає помилку «doesn't return items properly» замість того, щоб мовчки передати далі некоректні дані.
Кілька інших помилок регулярно з'являються, коли скрипт виростає за межі одного тестового елемента; вони підсумовані нижче.
| Помилка | Ймовірна причина | Виправлення |
|---|---|---|
| «Doesn't return items properly» | Значення, що повертається, не є масивом об'єктів, обгорнутих у json | Поверніть масив, де кожен елемент має ключ json |
| «Cannot find module» | Скрипт імпортує зовнішній npm-пакет, недоступний на цьому інстансі | Встановіть і додайте модуль у дозволений список на self-hosted n8n або уникайте зовнішніх імпортів на n8n Cloud |
| Code node не може прочитати credential | Code node за задумом не має доступу до збережених credentials | Отримуйте автентифіковані дані через ноду HTTP Request і передавайте в Code node лише її JSON |
Sources: Common issues | Nodes | n8n Docs, Using the Code node | Build | n8n Docs
Від тестових даних до реальних продакшн-даних API

Запуск n8n Code node JavaScript на реальних продакшн-даних API змінює припущення, яке нормально працювало для одного прикладного елемента: n8n автоматично обробляє зв'язування елементів лише тоді, коли надходить один вхідний елемент. Щойно скрипт обробляє відповідь API з кількома елементами або створює нові елементи замість передачі тих самих далі, це автоматичне зв'язування вже не покриває результат, і подальші ноди можуть втратити відстеження того, який вихід походить від якого входу.
Виправлення полягає в тому, щоб явно встановити pairedItem для кожного елемента, який повертає скрипт, щоб подальші ноди все ще могли простежити результат до його джерела. Обмеження щодо credentials і модулів, розглянуті вище, тут мають ще більше значення, оскільки саме в продакшн-скриптах команда найчастіше сягає по зовнішній пакет або забуває, що автентифіковані виклики належать ноді HTTP Request, а не Code node.
Sources: Preserving linking in the Code node | Build | n8n Docs


