03.01 Node.js
Узел JavaScript позволяет писать и выполнять код на JavaScript, импортировать библиотеки npm и обрабатывать различные задачи по обработке данных. Узел обеспечивает надежную поддержку для интеграции пользовательского кода в рабочие процессы, повышая гибкость и функциональность сценариев.
Добавление кода в сценарий
Для того, чтобы добавить код в сценарий необходимо:
- Нажать на одну из кнопок добавления узла;
- Выбрать узел JavaScript в окне выбора приложений;

- Открыть добавленный узел JavaScript и внести изменения в заготовку кода самостоятельно или с помощью AI ассистента.

Обмен данными между узлами
Использование данных предыдущих узлов в коде
Код, сгенерированный в узле JavaScript может использовать выходные данные предыдущих узлов сценария. Например, в узле JavaScript можно упомянуть параметр, переданный на узел Trigger on Webhook с помощью HTTP-запроса. Для этого необходимо:
- Записать выражение для добавление константы
const =
;
- Выбрать необходимый параметр предыдущих узлов.

При добавлении данных из других узлов, часть выражения может быть обернута в обратные кавычки, например, так: data["{{1.headers.
`
Content-Type
`
}}"]
, хотя другой узел возвращал свойство без них. Удалять обратные кавычки не требуется, при обработке данного участка кода кавычки будут проигнорированы. В случае удаления их ручным способом, выполнение кода может завершиться с ошибкой.
Передача обработанных данных в последующие узлы
Результатом работы JavaScript может являться строка, числовое значение, JSON-объект и так далее. Выходные данные узла JavaScript также можно использовать в других узлах сценария. Например, параметр сгенерированный в узле JavaScript может быть записан в качестве переменной. Для этого необходимо:
- В узле для добавления переменной SetVariables нажать на поле Value;

- Во вспомогательном окне выбрать параметр, сгенерированный в узле JavaScript.

Использование переменных
Переменные, созданные в сценарии или глобальные переменные также можно использовать в коде узла JavaScript.
Обработка файлов или массива файлов
Код узла JavaScript может быть использован для обработки файлов или массива файлов переданных в сценарий, например, с помощью отправки запроса на узел Trigger on Webhook.
async function run({execution_id, input, data, page}) {
const file = data["{{2.body.files.[].content}}"];
}
Даже при отправке одного файла он распознается как массив файлов. Поэтому необходимо указать его индекс:
async function run({execution_id, input, data, page}) {
const file = data["{{2.body.files.[0].content}}"];
}
В результате константе file
будет присвоен путь к файлу, который можно использовать, например, для загрузки файлов в определенную форму:
async function run({execution_id, input, data, page}) {
const file = data["{{2.body.files.[0].content}}"];
await (await page.$x('//*/input[@type="file"]'))[0].uploadFile(file);
}
Чтобы выполнить итерацию по массиву файлов известной длины, например, 5, нужно написать следующий код:
async function run({execution_id, input, data, page}) {
const files = [
data["{{2.body.files.[0].content}}"],
data["{{2.body.files.[1].content}}"],
data["{{2.body.files.[2].content}}"],
data["{{2.body.files.[3].content}}"],
data["{{2.body.files.[4].content}}"]
].filter(file => file && file !== 'null');
const uploadForm = await page.$x('//*/input[@type="file"]')[0];
for (let file of files) {
await uploadForm.uploadFile(file);
}
}
Экспорт файлов из JS
В JavaScript-узле можно создавать и редактировать файлы в файловой системе, используя, например, пакет fs. Для того чтобы вернуть файлы из узла, можно воспользоваться следующими функциями:
- file(filePath) — возвращает один файл по указанному пути. Параметр filePath должен быть строкой.
- files(filePaths) — возвращает массив файлов по указанным путям. Параметр filePaths должен быть массивом строк.
Важно: Э ти функции работают только на первом уровне вложенности возвращаемых из узла данных.
Пример кода:
import fs from 'fs';
export default async function run({execution_id, input, data, store, db}) {
fs.writeFileSync('file1.txt', 'some file content 1');
fs.writeFileSync('file2.txt', 'some file content 2');
fs.writeFileSync('file3.txt', 'some file content 3');
return {
file: file('file1.txt'),
files: files(['file2.txt', 'file3.txt'])
}
}
Пример нерабочего кода (функции file/files находятся глубже первого уровня вложенности):
import fs from 'fs';
export default async function run({execution_id, input, data, store, db}) {
fs.writeFileSync('file1.txt', 'some file content 1');
fs.writeFileSync('file2.txt', 'some file content 2');
fs.writeFileSync('file3.txt', 'some file content 3');
return {
object: {
file: file('file1.txt'),
files: files(['file2.txt', 'file3.txt'])
}
}
}