Как устроены данные между узлами

Когда сценарий выполняется, данные передаются от одного узла к другому. Если вы понимаете, в каком виде они передаются, всё остальное — выражения, циклы, преобразования — становится сильно понятнее.

Примечание. Внутреннее устройство n8n стабильно, но названия отдельных опций и операций могут со временем меняться. Если что-то выглядит иначе — это нормально, общая модель всё та же.

Items: данные — это массив

Каждый узел в n8n получает на вход и отдаёт на выход массив элементов — items. Item — это один объект данных.

Это важно: даже если узел вернул всего один результат, это всё равно массив из одного элемента, а не «голый» объект.

Один item обычно состоит из двух частей:

  • json — основная полезная нагрузка в виде JSON. Это то, что вы видите в интерфейсе и с чем работаете в выражениях.
  • binary — необязательная часть с двоичными данными (файлы, изображения). Большинство узлов её не использует, и о ней можно не думать, пока не начнёте работать с файлами.

Когда мы пишем {{ $json.body.question }}, мы говорим: «возьми у текущего item его JSON-часть и обратись к полю body.question».

Один элемент или много

Узлы работают по простому правилу: на каждый входящий item — выполниться по одному разу и положить результаты в выход.

Примеры:

  • Webhook обычно отдаёт один item — данные одного входящего HTTP-запроса.
  • Запрос в базу данных, который вернул 50 строк, отдаст 50 items.
  • HTTP Request к API, который вернул массив объектов, по умолчанию вернёт один item с этим массивом внутри (если не включён режим, при котором каждый элемент массива становится отдельным item — у разных узлов это сделано по-разному).

Если узлу на вход пришло 50 items, он будет выполнен 50 раз — по одному разу на каждый item. Это значит, что узел HTTP Request, поставленный после узла, который вернул 50 строк из базы, отправит 50 HTTP-запросов.

Как смотреть на данные в n8n

Когда вы открываете узел после выполнения сценария, n8n показывает входящие и исходящие данные. Обычно есть несколько режимов отображения:

  • Table — табличный вид, удобен, когда у всех items одинаковая структура.
  • JSON — «сырой» JSON, удобен, чтобы понять точную структуру.
  • Schema — схема: какие поля есть, какого типа.

Привыкните при разработке всегда сверяться с JSON-видом — оттуда понятнее всего, как обращаться к полям в выражениях.

Что хранится между узлами

После того как узел выполнен, его выходные данные доступны не только следующему узлу, но и всем последующим узлам в сценарии — через ссылку на имя узла. Об этом — в следующем уроке про выражения.

Главное

  • Между узлами всегда передаётся массив items.
  • Item — это объект с полями json (и опционально binary).
  • Сколько items на входе — столько раз обычно выполняется узел.
  • Текущий item в выражениях — это $json.