Эта документация была автоматически переведена ИИ.
Узел JavaScript-скрипт позволяет выполнять пользовательский серверный JavaScript-скрипт в рамках рабочего процесса. В скрипте можно использовать переменные из предыдущих этапов рабочего процесса в качестве параметров, а возвращаемое значение скрипта может быть передано последующим узлам.
Скрипт выполняется в рабочем потоке на сервере приложения NocoBase и поддерживает большинство функций Node.js. Однако существуют некоторые отличия от нативной среды выполнения. Подробнее см. в разделе Список возможностей.
В интерфейсе настройки рабочего процесса нажмите кнопку «Плюс» («+») в потоке, чтобы добавить узел «JavaScript»:


Используются для передачи переменных или статических значений из контекста рабочего процесса в скрипт, где они будут использоваться в логике кода. name — это имя параметра, которое после передачи в скрипт становится именем переменной. value — это значение параметра, которое может быть переменной или константой.
Содержимое скрипта можно рассматривать как функцию. Вы можете написать любой JavaScript-код, поддерживаемый средой Node.js, и использовать оператор return для возврата значения в качестве результата выполнения узла, которое затем может быть использовано последующими узлами как переменная.
После написания кода вы можете нажать кнопку «Тест» под полем редактора, чтобы открыть диалоговое окно тестового выполнения. Там вы сможете ввести статические значения для параметров и выполнить симуляцию. После выполнения в диалоговом окне будут отображены возвращаемое значение и содержимое вывода (журнала).

Единица измерения — миллисекунды. Значение 0 означает, что таймаут не установлен.
Если этот параметр отмечен, последующие узлы будут выполнены, даже если скрипт завершится с ошибкой или превысит время ожидания.
Если скрипт завершится с ошибкой, он не вернет никакого значения, и результат узла будет заполнен сообщением об ошибке. Если последующие узлы используют переменную результата из узла скрипта, к этому следует относиться с осторожностью.
Соответствует версии Node.js, на которой работает основное приложение.
В скрипте можно использовать модули с ограничениями, что соответствует стандарту CommonJS. Для импорта модулей в коде используйте директиву require().
Поддерживаются нативные модули Node.js и модули, установленные в node_modules (включая зависимости, уже используемые NocoBase). Модули, которые должны быть доступны для использования в коде, необходимо объявить в переменной среды приложения WORKFLOW_SCRIPT_MODULES. Несколько имен пакетов разделяются запятыми, например:
Модули, не объявленные в переменной среды WORKFLOW_SCRIPT_MODULES, не могут быть использованы в скрипте, даже если они являются нативными для Node.js или уже установлены в node_modules. Эта политика позволяет на уровне эксплуатации контролировать список модулей, доступных пользователям, и в некоторых сценариях предотвращать чрезмерные права доступа скриптов.
В среде, где развертывание выполнено не из исходного кода, если какой-либо модуль не установлен в node_modules, вы можете вручную установить необходимый пакет в каталог storage. Например, для использования пакета exceljs выполните следующие действия:
Затем добавьте относительный (или абсолютный) путь к этому пакету, основанный на текущем рабочем каталоге приложения (CWD), в переменную среды WORKFLOW_SCRIPT_MODULES:
После этого вы сможете использовать пакет exceljs в своем скрипте:
Не поддерживаются глобальные переменные, такие как global, process, __dirname и __filename.
Параметры, настроенные в узле, становятся глобальными переменными в скрипте и могут быть использованы напрямую. Параметры, передаваемые в скрипт, поддерживают только примитивные типы, такие как boolean, number, string, object и массивы. Объект Date при передаче будет преобразован в строку формата ISO. Другие сложные типы, например, экземпляры пользовательских классов, не могут быть переданы напрямую.
С помощью оператора return можно вернуть данные примитивных типов (по тем же правилам, что и для параметров) в узел в качестве его результата. Если оператор return не вызывается в коде, выполнение узла не будет иметь возвращаемого значения.
Поддерживается использование console для вывода логов.
При выполнении рабочего процесса вывод узла скрипта также записывается в файл логов соответствующего рабочего процесса.
Поддерживается использование async для определения асинхронных функций и await для их вызова. Поддерживается использование глобального объекта Promise.
Если вам необходимо использовать такие методы, как setTimeout, setInterval или setImmediate, их нужно импортировать из пакета timers Node.js.