4 Javascript предобработка

Обзор

В этом разделе приведены сведения о предварительной обработке при помощи JavaScript.

JavaScript предобработка

Предобработка JavaScript выполняется путём вызова функции JavaScript с единственным параметром 'value' и заданным пользователем телом функции. Результатом шага предобработки является значение, которое возвращается из этой функции, например, для выполнения конвертации из градусов Фаренгейта в Цельсия пользователю необходимо ввести в параметрах предобработки JavaScript:

return (value - 32) * 5 / 9

Это будет обёрнуто сервером в функцию JavaScript :

function (value)
       {
          return (value - 32) * 5 / 9
       }

Входной параметр 'value' всегда передается как строка. Возвращаемое значение автоматически приводится к строке через метод ToString() (если он завершится с ошибкой, тогда эта ошибка возвращается в виде строкового значения), с несколькими исключениями:

  • возврат неопределенного значения приведет к ошибке
  • возврат значения null приведет к тому, что входящее значение будет отброшено, очень похоже на предварительную обработку 'Отбросить значение' на действие 'Другое при ошибке'.

Ошибки можно вернуть при помощи выбрасывания значений / объектов в качестве исключений (обычно это строки или объекты ошибок).

Например:

if (value == 0)
           throw "Zero input value"
       return 1/value

У каждого скрипта есть 10-секундный тайм-аут - время ожидания выполнения (в зависимости от скрипта, срабатывание тайм-аута может занять более длительное время); превышение времени ожидания вернет ошибку. Также применяется ограничение heap памяти в 512 мегабайт (64 мегабайта до версии 6.0.19).

Байтовое представление шага предобработки JavaScript кэшируется и используется повторно, когда шаг применяется в следующий раз. Любые изменения в шагах предварительной обработки элемента данных вызовут сброс закэшированного скрипта и затем его перекомпиляцию.

Последовательные ошибки во время выполнения (3 раза подряд) вызовут повторную инициализацию механизма для уменьшения вероятности того, что один скрипт сломает всю среду выполнения для следующих скриптов (это действие заносится в журнал с режимом отладки DebugLevel 4 и выше).

Предобработка JavaScript реализована при помощи механизма JavaScript Duktape (https://duktape.org/).

Смотрите также: Дополнительные объекты и глобальные функции JavaScript

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

Bмеется возможность использования пользовательских макросов в коде JavaScript . Если скрипт содержит макросы, эти макросы раскрываются сервером / прокси до выполнения конкретных шагов предварительной обработки. Обратите внимание, что при тестировании шагов предварительной обработки в веб-интерфейсе, значения макросов не извлекаются автоматически и их нужно указывать вручную.

Когда макрос заменяется своим значением, контекст игнорируется. Значение макроса вставляется в код как есть, невозможно добавить дополнительное экранирование до помещения значения в код JavaScript. Поэтому будьте аккуратны, так как это может вызвать ошибки в JavaScript в некоторых случаях.

В примере ниже, если полученное значение превышает значение макроса {$THRESHOLD}, то вместо самого значения возвращается значение порога (если присутствует):

var threshold = '{$THRESHOLD}';
       return (!isNaN(threshold) && value > threshold) ? threshold : value;