Цей документ було перекладено за допомогою ШІ. Для точної інформації зверніться до англійської версії.
Вузол 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 у скрипті (назва в require повинна точно відповідати визначеній у змінній середовища):
Не підтримуються такі глобальні змінні, як global, process, __dirname та __filename.
Параметри, налаштовані у вузлі, будуть використовуватися як глобальні змінні в скрипті, їх можна використовувати безпосередньо. Параметри, що передаються в скрипт, підтримують лише базові типи, такі як boolean, number, string, object та масиви. Об'єкт Date після передачі буде перетворено на рядок у форматі ISO. Інші складні типи не можуть бути передані безпосередньо, наприклад, екземпляри користувацьких класів.
За допомогою оператора return можна повернути дані базових типів (за тими ж правилами, що й для параметрів) назад у вузол як результат. Якщо в коді не викликається оператор return, виконання вузла не матиме поверненого значення.
Підтримується використання console для виведення журналів.
Під час виконання робочого процесу вивід вузла скрипту також буде записаний у файл журналу відповідного робочого процесу.
Підтримується використання async для визначення асинхронних функцій та await для виклику асинхронних функцій. Підтримується використання глобального об'єкта Promise.
Якщо вам потрібно використовувати такі методи, як setTimeout, setInterval або setImmediate, їх потрібно імпортувати через пакет timers Node.js.