Перейти к содержанию

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 с пользовательскими данными.

Пример входных данных:

Входные items
[
  {
    "json": {
      "name": "Анна",
      "email": "anna@example.com",
      "amount": 1200
    }
  },
  {
    "json": {
      "name": "Иван",
      "email": "ivan@example.com",
      "amount": 900
    }
  }
]

Code node должна вернуть массив items. Даже если результат один, его нужно вернуть как массив с одним объектом.

Минимальный результат Code node
return [
  {
    json: {
      status: 'ok'
    }
  }
];

Режимы 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.

Сумма заказов в JavaScript
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.

Обработка одного item в JavaScript
const amount = Number($json.amount || 0);

return {
  json: {
    ...$json,
    isLargeOrder: amount >= 1000
  }
};

Как настроить Code node пошагово

Настройка Code node начинается с выбора языка и режима выполнения. После этого нужно написать код, проверить входные данные и выполнить ноду вручную.

  1. Открой workflow в n8n.
  2. Нажми Add node.
  3. Найди ноду Code.
  4. Выбери язык: JavaScript или Python.
  5. Выбери режим выполнения: Run Once for All Items или Run Once for Each Item.
  6. Открой вкладку Input и проверь структуру данных.
  7. Напиши код с возвратом результата через return.
  8. Нажми Execute step.
  9. Проверь вкладку Output.
  10. Подключи следующую ноду, например HTTP Request или Telegram.

Главное правило

Code node должна вернуть данные в формате, который понимает n8n. Для JavaScript это обычно return [{ json: {...} }] в режиме Run Once for All Items.

Примеры JavaScript для n8n Code node

JavaScript в n8n Code node чаще всего используют для преобразования JSON. Ниже — типовые заготовки для реальных workflow.

Добавить новое поле

Добавление поля к каждому item
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

Сообщение для 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

Payload для HTTP Request
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

Добавление поля в Python
result = []

for item in _input.all():
    data = item.json
    data["source"] = "n8n"
    result.append({"json": data})

return result

Посчитать сумму

Сумма заказов в Python
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

Пример чтения поля:

Чтение поля email
return $input.all().map(item => {
  return {
    json: {
      email: item.json.email
    }
  };
});

Если поле вложенное, проверяй его наличие перед чтением.

Безопасное чтение вложенного поля
return $input.all().map(item => {
  return {
    json: {
      city: item.json.address?.city || null
    }
  };
});

Как вернуть несколько items

Code node возвращает несколько items через массив объектов. Каждый объект массива становится отдельным item для следующей ноды.

Создание нескольких items
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:

Ответ API с массивом
{
  "orders": [
    { "id": 101, "amount": 1200 },
    { "id": 102, "amount": 900 }
  ]
}

Code node может развернуть этот массив:

Разворачивание массива orders
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.

Неправильно:

Неправильный return
return {
  status: 'ok'
};

Правильно:

Правильный return
return [
  {
    json: {
      status: 'ok'
    }
  }
];

Ошибка 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. Не пиши код вслепую, если не видишь реальную структуру данных.

  1. Выполни предыдущую ноду.
  2. Открой Code node.
  3. Посмотри вкладку Input.
  4. Скопируй один item как пример структуры.
  5. Напиши минимальный код, который возвращает одно поле.
  6. Нажми Execute step.
  7. Проверь вкладку Output.
  8. Добавляй сложную логику постепенно.

Для временной диагностики можно вернуть промежуточные значения в 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-разметка статьи

Краткая структура для AI-систем
{
  "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.