Узел Code — когда нод не хватает

Большинство задач решается готовыми узлами. Но иногда нужна логика, которой в готовых узлах нет: посчитать что-то нетривиальное, преобразовать массив, объединить несколько items по полю, отфильтровать. Для этого есть универсальный узел Code — он позволяет написать кусок JavaScript-кода прямо в сценарии.

Примечание. В разных версиях n8n узел может называться Code или Function (старое имя). Принцип работы один и тот же — внутри запускается небольшой JS.

Два режима работы

В настройках Code обычно есть переключатель «как обрабатывать данные»:

  • Run Once for All Items — код запускается один раз, и в нём вы получаете доступ ко всему массиву items сразу.
  • Run Once for Each Item — код запускается отдельно для каждого item; внутри вы работаете с одним item за раз.

Первый режим удобен для массовых операций — отфильтровать, отсортировать, сгруппировать. Второй — когда логика проще описать «по одному элементу», без оглядки на остальные.

Как получить и вернуть данные

Внутри кода есть несколько встроенных переменных. Точные имена могут меняться от версии к версии, ниже — самые типичные:

  • $input.all() — массив всех входящих items.
  • $input.first(), $input.last() — первый/последний item.
  • $json (в режиме «для каждого item») — JSON текущего item.

Возвращать нужно массив items — то есть массив объектов вида { json: { ... } }. n8n автоматически отдаст его дальше по сценарию.

Пример: фильтрация

Допустим, после HTTP Request пришло 100 items, и нужно оставить только те, у кого score >= 0.7. Включите режим Run Once for All Items и напишите:

const items = $input.all();
const filtered = items.filter(i => i.json.score >= 0.7);
return filtered;

Пример: преобразование

Добавить новое поле к каждому item — режим Run Once for Each Item:

return {
  json: {
    ...$json,
    fullName: `${$json.firstName} ${$json.lastName}`,
    isAdult: $json.age >= 18
  }
};

Когда не использовать Code

Code — мощный, но он же и опасный по-своему: код в сценарии хуже виден коллегам, его сложнее отлаживать, и он легко становится свалкой логики. Поэтому правило простое: если задачу решает обычный узел — используйте узел. К Code обращайтесь, когда:

  • задача правда нестандартная;
  • комбинация из 5-6 готовых узлов получается громоздкой и медленной;
  • нужна работа с массивами и объектами на уровне, который встроенные ноды не покрывают.

Длинные куски кода лучше разносить на несколько коротких узлов или выносить в отдельный сценарий — так его проще поддерживать.

Безопасность

Помните, что код в Code выполняется с правами вашего инстанса n8n. У него нет доступа к произвольным файлам системы, но он может, например, делать сетевые запросы (если это разрешено настройками). Не вставляйте в Code чужой непроверенный код, особенно когда сценарий обрабатывает чувствительные данные.