Узел 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 чужой непроверенный код, особенно когда сценарий обрабатывает чувствительные данные.