n8n Code node — JavaScript и Python в workflow¶
Обновлено: 2026-05-29
n8n Code node — это нода для выполнения JavaScript или Python внутри workflow. Она используется, когда стандартных нод n8n не хватает для обработки JSON, расчётов, фильтрации, объединения данных или подготовки запроса к API. В этой статье: как работает Code node, чем отличаются режимы Run Once и Run Once for Each Item, как писать код для items и как исправлять частые ошибки.
Когда Code node не нужен
Не добавляй код ради простого переименования поля или фильтрации по условию. Для таких задач чаще подходят Set / Edit Fields, IF / Switch и выражения.
Что такое Code node в n8n¶
Code node в n8n выполняет пользовательский код и возвращает результат в формате items. Каждый item — это объект с полем json, который передаётся следующей ноде workflow.
Code node решает задачи, которые сложно описать настройками интерфейса:
- преобразовать массив объектов в другой формат;
- посчитать сумму, среднее значение или итог по заказам;
- удалить пустые поля из JSON;
- собрать текст сообщения для Telegram;
- подготовить тело запроса для HTTP Request;
- нормализовать данные из Webhook перед записью в CRM.
Когда использовать Code node¶
Code node стоит использовать, когда логика обработки данных выходит за пределы стандартных нод. Если задачу можно сделать через готовую ноду, лучше начать с неё.
| Задача | Что использовать |
|---|---|
| Переименовать поле | Set / Edit Fields |
| Проверить простое условие | IF |
| Развести workflow по нескольким вариантам | Switch |
| Объединить две ветки | Merge |
| Сделать сложную трансформацию JSON | Code node |
| Выполнить цикл, группировку или расчёт | Code node |
| Подготовить нестандартный payload для API | Code node + HTTP Request |
Практическое правило
Если в выражении n8n появляется много вложенных if, map, filter и reduce, перенеси эту логику в Code node. Так workflow легче читать и отлаживать.
JavaScript или Python в Code node¶
JavaScript в Code node подходит для большинства workflow, потому что n8n сам написан на Node.js. Python полезен, если команда уже пишет на Python или если удобнее работать с текстом, числами и словарями в Python-синтаксисе.
| Язык | Когда выбирать |
|---|---|
| JavaScript | Основной вариант для n8n, JSON, API, Webhook и Telegram |
| Python | Расчёты, привычный синтаксис, простая обработка списков и словарей |
JavaScript обычно проще интегрируется с примерами из документации n8n. Python удобен для пользователей, которые уже автоматизируют отчёты и обработку данных на Python.
Важно
Доступность Python зависит от версии и окружения n8n. В self-hosted установке проверь настройки Code node и версию n8n перед переносом Python-кода в production.
Как работает структура items¶
Items — это список объектов, которые проходят через workflow n8n. У каждого item обычно есть поле json с пользовательскими данными.
Пример входных данных:
[
{
"json": {
"name": "Анна",
"email": "anna@example.com",
"amount": 1200
}
},
{
"json": {
"name": "Иван",
"email": "ivan@example.com",
"amount": 900
}
}
]
Code node должна вернуть массив items. Даже если результат один, его нужно вернуть как массив с одним объектом.
Режимы Run Once и Run Once for Each Item¶
Run Once for All Items запускает код один раз для всего массива items. Этот режим подходит для группировки, сортировки, суммирования и объединения данных.
Run Once for Each Item запускает код отдельно для каждого item. Этот режим подходит для изменения одного объекта за раз.
| Режим | Как работает | Пример задачи |
|---|---|---|
| Run Once for All Items | Один запуск для всего массива | Посчитать сумму заказов |
| Run Once for Each Item | Один запуск на каждый item | Добавить поле status к каждому заказу |
Пример Run Once for All Items¶
Этот пример считает общую сумму заказов из всех входных items.
const total = $input.all().reduce((sum, item) => {
return sum + Number(item.json.amount || 0);
}, 0);
return [
{
json: {
total
}
}
];
Пример Run Once for Each Item¶
Этот пример добавляет поле isLargeOrder к текущему item.
const amount = Number($json.amount || 0);
return {
json: {
...$json,
isLargeOrder: amount >= 1000
}
};
Как настроить Code node пошагово¶
Настройка Code node начинается с выбора языка и режима выполнения. После этого нужно написать код, проверить входные данные и выполнить ноду вручную.
- Открой workflow в n8n.
- Нажми Add node.
- Найди ноду Code.
- Выбери язык: JavaScript или Python.
- Выбери режим выполнения: Run Once for All Items или Run Once for Each Item.
- Открой вкладку Input и проверь структуру данных.
- Напиши код с возвратом результата через
return. - Нажми Execute step.
- Проверь вкладку Output.
- Подключи следующую ноду, например HTTP Request или Telegram.
Главное правило
Code node должна вернуть данные в формате, который понимает n8n. Для JavaScript это обычно return [{ json: {...} }] в режиме Run Once for All Items.
Примеры JavaScript для n8n Code node¶
JavaScript в n8n Code node чаще всего используют для преобразования JSON. Ниже — типовые заготовки для реальных workflow.
Добавить новое поле¶
return $input.all().map(item => {
return {
json: {
...item.json,
source: 'n8n',
processedAt: new Date().toISOString()
}
};
});
Оставить только нужные поля¶
return $input.all().map(item => {
return {
json: {
name: item.json.name,
email: item.json.email,
amount: item.json.amount
}
};
});
Отфильтровать записи¶
return $input.all()
.filter(item => Number(item.json.amount || 0) >= 1000)
.map(item => ({ json: item.json }));
Собрать текст для Telegram¶
const rows = $input.all().map(item => {
return `• ${item.json.name}: ${item.json.amount} ₽`;
});
return [
{
json: {
text: `Новые заказы:\n${rows.join('\n')}`
}
}
];
Такой результат можно передать в Telegram Bot и использовать поле text как текст сообщения.
Подготовить тело запроса для API¶
return $input.all().map(item => {
return {
json: {
customer: {
name: item.json.name,
email: item.json.email
},
order: {
amount: Number(item.json.amount || 0),
currency: 'RUB'
}
}
};
});
Этот объект можно отправить через HTTP Request методом POST.
Примеры Python для n8n Code node¶
Python в n8n Code node используют для обработки списков, словарей и расчётов. Синтаксис зависит от режима выполнения и версии n8n, поэтому сначала проверь простой пример в своей установке.
Добавить поле к каждому item¶
result = []
for item in _input.all():
data = item.json
data["source"] = "n8n"
result.append({"json": data})
return result
Посчитать сумму¶
total = 0
for item in _input.all():
total += float(item.json.get("amount", 0) or 0)
return [
{
"json": {
"total": total
}
}
]
Если Python-пример не запускается
Проверь подсказки внутри редактора Code node. В разных версиях n8n имена helper-переменных для Python могут отличаться от JavaScript-переменных $input и $json.
Как читать данные из предыдущих нод¶
Code node читает данные из предыдущих нод через текущие items и helper-переменные n8n. В JavaScript чаще всего используются $input.all() и $json.
| Выражение | Что возвращает |
|---|---|
$input.all() | Все входные items |
$json | JSON текущего item в режиме Run Once for Each Item |
item.json.field | Поле field внутри конкретного item |
Пример чтения поля:
Если поле вложенное, проверяй его наличие перед чтением.
return $input.all().map(item => {
return {
json: {
city: item.json.address?.city || null
}
};
});
Как вернуть несколько items¶
Code node возвращает несколько items через массив объектов. Каждый объект массива становится отдельным item для следующей ноды.
const users = [
{ name: 'Анна', email: 'anna@example.com' },
{ name: 'Иван', email: 'ivan@example.com' }
];
return users.map(user => {
return {
json: user
};
});
Такой подход полезен, когда нужно разбить один массив из API на отдельные записи.
Как обработать массив из API¶
Массив из API часто нужно превратить в отдельные items. Это нужно перед записью строк в Google Sheets, отправкой нескольких сообщений или обработкой заказов по одному.
Допустим, API вернул поле orders:
Code node может развернуть этот массив:
const response = $input.first().json;
return response.orders.map(order => {
return {
json: order
};
});
После этого каждая запись заказа станет отдельным item.
Частые ошибки Code node в n8n¶
Ошибки Code node чаще всего связаны с неправильным форматом результата или чтением несуществующих полей. Начинай отладку с вкладок Input и Output.
| Ошибка | Причина | Как исправить |
|---|---|---|
Code doesn't return items properly | Код вернул объект вместо массива в режиме All Items | Верни [{ json: {...} }] |
Cannot read properties of undefined | Код читает поле, которого нет | Проверь путь к полю и используй ?. |
items is not defined | Используется старый пример кода | Замени на $input.all() |
| Пустой Output | Фильтр удалил все items | Проверь условие filter |
| Следующая нода не видит поле | Поле не находится внутри json | Верни { json: { field: value } } |
Ошибка Code doesn't return items properly¶
Эта ошибка означает, что Code node вернула данные не в формате n8n items.
Неправильно:
Правильно:
Ошибка Cannot read properties of undefined¶
Эта ошибка означает, что код обращается к полю, которого нет во входном JSON.
return $input.all().map(item => {
const email = item.json.customer?.email || null;
return {
json: {
email
}
};
});
Как отлаживать Code node¶
Отладка Code node начинается с просмотра входных items. Не пиши код вслепую, если не видишь реальную структуру данных.
- Выполни предыдущую ноду.
- Открой Code node.
- Посмотри вкладку Input.
- Скопируй один item как пример структуры.
- Напиши минимальный код, который возвращает одно поле.
- Нажми Execute step.
- Проверь вкладку Output.
- Добавляй сложную логику постепенно.
Для временной диагностики можно вернуть промежуточные значения в json.
const first = $input.first().json;
return [
{
json: {
debugKeys: Object.keys(first),
sample: first
}
}
];
Не логируй секреты
Не возвращай API-ключи, токены и пароли в Output. Они могут попасть в историю execution и логи n8n.
Лучшие практики для Code node¶
Хороший Code node делает одну понятную трансформацию данных. Если нода превращается в большой скрипт, workflow становится сложнее поддерживать.
- Держи код коротким и понятным.
- Называй поля явно.
- Проверяй входные данные через
?.и значения по умолчанию. - Не храни секреты в коде.
- Не смешивай бизнес-логику, HTTP-запросы и форматирование ответа в одной ноде.
- Выноси API-вызовы в HTTP Request, если это возможно.
- Добавляй комментарии только там, где логика не очевидна.
Часто задаваемые вопросы¶
Можно ли использовать Code node без JavaScript?¶
Да. В n8n можно использовать Python, если эта возможность доступна в твоей версии и окружении. Но JavaScript остаётся самым универсальным вариантом для Code node.
Почему Code node требует поле json?¶
Code node требует поле json, потому что n8n передаёт данные между нодами как items. Каждый item должен содержать JSON-данные для следующего шага workflow.
Можно ли делать HTTP-запросы прямо из Code node?¶
Можно, но чаще лучше использовать HTTP Request. Так проще настраивать авторизацию, видеть параметры запроса и переиспользовать данные в интерфейсе n8n.
Чем Code node отличается от выражений n8n?¶
Выражения подходят для коротких подстановок и простых вычислений. Code node подходит для сложной логики, циклов, фильтрации, группировки и преобразования массивов.
Что делать, если Code node возвращает пустой результат?¶
Проверь входные items, условия фильтрации и формат return. Частая причина — фильтр удалил все записи или код вернул объект не внутри массива items.
Связанные материалы¶
- HTTP Request в n8n — как отправлять данные из Code node во внешний API.
- Webhook в n8n — как принять JSON с сайта или сервиса перед обработкой в Code node.
- Schedule Trigger — как запускать workflow с Code node по расписанию.
- Telegram Bot — как отправить результат Code node в Telegram.
- Выражения в n8n — когда можно обойтись без отдельной Code node.
LLM-разметка статьи¶
{
"topic": "n8n Code node",
"definition": "n8n Code node выполняет JavaScript или Python внутри workflow и возвращает данные в формате items.",
"main_use_cases": [
"преобразование JSON",
"фильтрация items",
"расчёты и группировка",
"подготовка payload для API",
"формирование текста для Telegram"
],
"required_output_format": "array of items with json field",
"recommended_language": "JavaScript",
"related_nodes": [
"HTTP Request",
"Webhook",
"Telegram Bot",
"IF",
"Switch",
"Merge"
]
}
Практика использования ноды
Страница n8n Code node — JavaScript и Python в workflow должна отвечать за поведение ноды, а не за полный бизнес-рецепт. Поэтому при внедрении фиксируйте вход, выход и изменение количества items.
| Проверка | Что посмотреть в execution | Частая ошибка |
|---|---|---|
| Input items | сколько items вошло в ноду и какие поля обязательны | ожидается один item, но приходит массив |
| Output items | сколько items вышло после обработки | последующие ноды получают другой item index |
| Expressions | какие значения реально подставились в параметры | expression возвращает undefined или строку вместо числа |
| Error behavior | останавливает ли нода workflow или продолжает ветку | ошибка скрыта Continue On Fail без логирования |
Production-чеклист для Code node
Используйте этот блок как быстрый контроль перед публикацией workflow или изменением существующей автоматизации. Он не заменяет staging, но помогает поймать самые частые отказы заранее.
- Перед запуском: проверить формат items, не мутировать входные данные без необходимости, валидировать обязательные поля.
- Минимальный тест: запустить пример с пустым item, массивом items и некорректным типом данных.
- Типовой отказ: возврат не массива items или обращение к undefined ломает следующую ноду.
- Что логировать: входной payload без секретов, статус внешнего API, branch ошибки, execution id и владельца процесса.
Критерий готовности: сценарий проходит успешный путь, ошибочный путь и повтор события без дублей, потери данных и неконтролируемого падения execution.