Выражения — один из самых мощных инструментов в Нейро42.
Они позволяют динамически задавать значения параметров узлов, используя данные:
- из предыдущих шагов воркфлоу
- из текущего контекста сценария
- из переменных проекта и окружения Нейро42
Кроме того, выражения поддерживают выполнение JavaScript прямо внутри параметра, что делает их удобным способом трансформировать данные без написания отдельного кода.
Как работают выражения
Нейро42 использует собственный шаблонизатор, расширенный:
- встроенными методами и переменными
- функциями для трансформации данных
- поддержкой популярных библиотек:
Luxon — работа с датами/временем
JMESPath — удобные запросы к JSON
Эти расширения позволяют легко:
- извлекать значения из вложенных объектов
- форматировать даты
- преобразовывать массивы
- составлять динамические строки
- обращаться к данным из любых узлов workflow
Работа с данными в выражениях
Чтобы эффективно писать выражения, важно понимать структуру данных в Нейро42.
Каждый узел передает свой JSON-объект дальше по цепочке, и выражения дают доступ к этим данным через служебные переменные:
- $json — данные текущего узла
- $prev — данные предыдущего узла
- $env — переменные окружения
- $workflow — метаданные сценария
- $jmespath() — запросы к JSON через JMESPath
Как использовать выражения
- Наведите курсор на параметр
- Переключитесь в режим Выражение
- Введите выражение вручную
Или откройте редактор выражений, где доступен проводник данных (Variable Browser).
Все выражения записываются в формате:
{{ ваша логика здесь }}
Пример 1: Доступ к данным тела вебхука
Допустим, входящие данные вебхука имеют структуру:
[
{
«headers»: {
«host»: «neuro42.instance»
},
«params»: {},
«query»: {},
«body»: {
«name»: «Jim»,
«age»: 30,
«city»: «New York»
}
}
]
Чтобы получить только значение поля city:
{{ $json.body.city }}
Этот пример:
- обращается к JSON тела вебхука через $json
- извлекает значение поля city
Альтернативная запись:
{{ $json[‘body’][‘city’] }}
или с использованием JMESPath:
{{ $jmespath($json, ‘body.city’) }}
Пример 2: Многострочные выражения на JavaScript
Если нужно выполнить несколько операций подряд, выражение можно оформить как IIFE (Immediately Invoked Function Expression):
{{ (() => {
let end = DateTime.fromISO(‘2017-03-13’);
let start = DateTime.fromISO(‘2017-02-13’);
let diff = end.diff(start, ‘months’);
return diff.toObject();
})() }}
Здесь:
- используется библиотека Luxon
- рассчитывается разница между датами в месяцах
- результат возвращается как объект
Такая форма удобна, когда логика становится длиннее одной строки.
Распространенные проблемы
Для ошибок и типичных сценариев отладки см. раздел: