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

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

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

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

- В вспомогательном окне выберите параметр, сгенерированный в узле JavaScript.
Таким образом, вы можете эффективно передавать и использовать обработанные данные между узлами в вашем сценарии.

Использование переменных
Переменные, созданные внутри сценария, или глобальные переменные также могут использоваться в узле JavaScript.
Переменные, созданные внутри сценария, или глобальные переменные также могут использоваться в узле JavaScript.
Обработка файлов или массивов файлов
Узел JavaScript может обрабатывать файлы или массивы файлов. Для обработки одного файла используйте следующий код:
async function run({execution_id, input, data, page}) {
const file = data["{{2.body.files.[0].content}}"];
if (file && file !== 'null') {
(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);
}
}Возврат файлов из JavaScript
В узле 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'])
}
}
}Пользовательские параметры в JavaScript
Пользовательские параметры в узле JavaScript позволяют «вынести» определённые части кода в специальные поля ввода, устраняя необходимость редактировать сам код.
Например, если в коде используется API-ключ, вы можете сгенерировать отдельное поле ввода для этого параметра в узле JavaScript. Таким образом, при обновлении API-ключа нужно изменить только значение в отдельном поле, а не код напрямую.
Подробнее обо всех возможных пользовательских параметрах см. здесь

Логирование
Логирование в узле JavaScript доступно с помощью команды console.log. Залогированные данные будут отображаться во вкладке Log.

Использование NPM-пакетов
Узел JavaScript поддерживает импорт npm-библиотек с помощью оператора import. Например, импорт и использование библиотеки "lodash":

Вы можете указать версию библиотеки с помощью символа @. Например:
import _ from '[email protected]';
import _ from 'axios@^1.2.0';После каждого сохранения сценария с узлом JavaScript выполняется проверка наличия импортов библиотек и изменений в списке библиотек и их версий (если указаны):
- Если есть изменения, библиотеки устанавливаются.
- Если изменений нет, используются сохранённые библиотеки и версии.
Установка библиотек занимает некоторое время. Если пользователь запустит узел до завершения установки, появится сообщение об ошибке: "Dependency installation is not yet completed. Please try again in a few seconds." В этом случае просто подождите немного перед продолжением.
Node Package Manager (NPM) — это инструмент для разработчиков, работающих с Node.js, так как он позволяет использовать обширную библиотеку готовых пакетов и легко управлять зависимостями проекта. Использование пакета axios позволяет разработчикам легко получать данные из внешних API или других веб-сервисов без необходимости писать обширный код для обработки HTTP-запросов и ответов.

Пример такого сценария — получение списка актуальных репозиториев GitHub на основе выбранного языка программирования с использованием пакета axios:
import axios from "axios";
export default async function run({ execution_id, input, data }) {
const language = "Javascript";
const url = `https://api.github.com/search/repositories?q=language:${encodeURIComponent(
language
)}&sort=stars&order=desc`;
try {
const response = await axios({
method: "GET",
url: url,
});
const repos = response.data.items.map((repo) => ({
name: repo.name,
owner: repo.owner.login,
stars: repo.stargazers_count,
url: repo.html_url,
}));
return {
trending_repositories: repos,
};
} catch (error) {
console.error(error);
return {
error: "An error occurred while fetching data from the GitHub API.",
};
}
}Другой пример использования NPM-пакетов — сценарий для расчёта времени, оставшегося до дедлайна, с использованием пакета Moment:
import moment from "moment";
export default async function run({ execution_id, input, data }) {
const deadline = "25.10.2024"; // Получаем дедлайн из входных данных
const now = moment(); // Получаем текущее время
const deadlineMoment = moment(deadline, "DD.MM.YYYY"); // Парсим строку дедлайна в объект Moment с пользовательским форматом
const remainingTime = deadlineMoment.from(now); // Вычисляем оставшееся время
return {
remainingTime
};
}Ограничения узла JavaScript
Максимальное время выполнения узла JavaScript — 2 минуты.
Вы можете добавить несколько узлов JavaScript в сценарий для последовательного выполнения, чтобы решать более сложные задачи.