Nodul LogoNodul
Инструменты кода

Node.js

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

Добавление кода в сценарий

Чтобы добавить код в сценарий, выполните следующие шаги:

  1. Нажмите одну из кнопок для добавления узла.
  2. В окне выбора приложения выберите узел JavaScript.

Добавление узла

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

Редактирование кода

Обмен данными между узлами

Использование данных из предыдущих узлов в коде

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

  • Напишите выражение для определения константы, например const =.
  • Выберите необходимый параметр из предыдущих узлов.

Таким образом, вы можете бесшовно интегрировать и манипулировать данными между различными узлами внутри сценария.

Использование данных

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

Передача обработанных данных в последующие узлы

Результатом узла JavaScript может быть строка, числовое значение, JSON-объект и т.д. Выходные данные узла JavaScript также могут использоваться в других узлах сценария. Например, параметр, сгенерированный в узле JavaScript, может быть записан как переменная. Для этого:

  1. В узле SetVariables нажмите на поле Value.

Поле Value

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

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

Выбор параметра

Использование переменных

Переменные, созданные внутри сценария, или глобальные переменные также могут использоваться в узле JavaScript.

Переменные, созданные внутри сценария, или глобальные переменные также могут использоваться в узле 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":

NPM пакеты

Вы можете указать версию библиотеки с помощью символа @. Например:

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-запросов и ответов.

axios

Пример такого сценария — получение списка актуальных репозиториев 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

Максимальное время выполнения узла JavaScript2 минуты.

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