Áú»¢¶Ä²©

Esta es una traducci¨®n de la p¨¢gina de documentaci¨®n original en espa?ol. Ay¨²danos a mejorarla.

5 Preprocesamiento con JavaScript

Descripci¨®n general

Esta secci¨®n proporciona detalles del preprocesamiento mediante JavaScript.

Preprocesamiento de JavaScript

El preprocesamiento de JavaScript se realiza invocando la ´Ú³Ü²Ô³¦¾±¨®²Ô de JavaScript con un 'valor' de par¨¢metro ¨²nico y cuerpo de ´Ú³Ü²Ô³¦¾±¨®²Ô proporcionado por el usuario. El El resultado del paso de preprocesamiento es el valor devuelto por esta ´Ú³Ü²Ô³¦¾±¨®²Ô, por ejemplo. Por ejemplo, para realizar la conversi¨®n de Fahrenheit a Celsius, ingrese:

retorno (valor - 32) * 5/9

en los par¨¢metros de preprocesamiento de JavaScript, que se incluir¨¢n en un Funci¨®n JavaScript por servidor:

´Ú³Ü²Ô³¦¾±¨®²Ô (valor)
       {
          retorno (valor - 32) * 5/9
       }

El par¨¢metro de entrada 'valor' siempre se pasa como una cadena. El regreso El valor se convierte autom¨¢ticamente en cadena mediante el m¨¦todo ToString() (si falla, entonces el error se devuelve como valor de cadena), con algunos excepciones:

  • devolver un valor indefinido generar¨¢ un error;
  • devolver un valor nulo har¨¢ que se descarte el valor de entrada, muy parecido al preprocesamiento 'Descartar valor' en la acci¨®n 'Personalizado en caso de error'.

Los errores se pueden devolver arrojando valores/objetos (normalmente ya sea cadenas u objetos de error).

Por ejemplo:

si (valor == 0)
           tirar "valor de entrada cero"
       devolver 1/valor

Cada script tiene un tiempo de espera de ejecuci¨®n de 10 segundos (dependiendo del script, el tiempo de espera puede tardar m¨¢s en activarse); super¨¢ndolo ser¨¢ error de devoluci¨®n. Se aplica un l¨ªmite de almacenamiento din¨¢mico de 512 megabytes.

El c¨®digo de bytes del paso de preprocesamiento de JavaScript se almacena en cach¨¦ y se reutiliza cuando El paso se aplica la pr¨®xima vez. Cualquier cambio en los pasos de preprocesamiento del art¨ªculo. har¨¢ que el script almacenado en cach¨¦ se restablezca y se vuelva a compilar m¨¢s tarde.

Fallas consecutivas en el tiempo de ejecuci¨®n (3 seguidas) causar¨¢n que el motor se apague. reiniciado para mitigar la posibilidad de que un script rompa el entorno de ejecuci¨®n para los siguientes scripts (esta acci¨®n se registra con Nivel de depuraci¨®n 4 y superior).

El preprocesamiento de JavaScript se implementa con el motor JavaScript .

Ver tambi¨¦n: Objetos JavaScript adicionales y globales funciones

Uso de macros en scripts

Es posible utilizar macros de usuario en el c¨®digo JavaScript. Si un gui¨®n contiene macros de usuario, estas macros son resueltas por el servidor/proxy antes de ejecutar los pasos de preprocesamiento espec¨ªficos. Tenga en cuenta que al realizar pruebas de pasos de preprocesamiento en la interfaz, los valores macro no se extraer¨¢n y deben ingresarse manualmente.

El contexto se ignora cuando una macro se reemplaza con su valor. El valor de la macro se inserta en el c¨®digo tal cual, no es posible agregar escapes adicionales antes de colocar el valor en el c¨®digo JavaScript. Tenga en cuenta que esto puede provocar errores de JavaScript en algunos casos.

En el siguiente ejemplo, si el valor recibido excede el valor de una macro {$THRESHOLD}, en su lugar se devolver¨¢ el valor del umbral (si est¨¢ presente):

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

Ejemplos

Los siguientes ejemplos ilustran c¨®mo puede utilizar el preprocesamiento de JavaScript.

Cada ejemplo contiene una breve descripci¨®n, un cuerpo de ´Ú³Ü²Ô³¦¾±¨®²Ô para los par¨¢metros de preprocesamiento de JavaScript y el resultado del paso de preprocesamiento: valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô.

Ejemplo 1: convertir un n¨²mero (notaci¨®n cient¨ªfica a entero)

Convierte el n¨²mero "2.62128e+07" de notaci¨®n cient¨ªfica a un n¨²mero entero.

retorno (±·¨²³¾±ð°ù´Ç (valor))

Valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô: 26212800.

Ejemplo 2: convertir un n¨²mero (binario a decimal)

Convierta el n¨²mero binario "11010010" a un n¨²mero decimal.

retorno(parseInt(valor,2))

Valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô: 210.

Ejemplo 3: redondear un n¨²mero

Redondea el n¨²mero "18.2345" a 2 d¨ªgitos.

retorno(Math.round(valor* 100) / 100)

Valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô: 18.23.

Ejemplo 4: contar letras en una cadena

Cuente el n¨²mero de letras en la cadena "Áú»¢¶Ä²©".

retorno (valor.longitud)

Valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô: 6.

Ejemplo 5: Obtener el tiempo restante

Obtenga el tiempo restante (en segundos) hasta la fecha de vencimiento de un certificado (12 de febrero a las 12:33:56 2022 GMT).

var dividir = valor.split(' '),
           MONTHS_LIST = ['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre' ],
           ¨ª²Ô»å¾±³¦±ð³å³¾±ð²õ = ('0' + (LISTA_MESES.indexOf(split[0]) + 1)).slice(-2),
           ISOdate = dividir[3] + '-' + ¨ª²Ô»å¾±³¦±ð³å³¾±ð²õ + '-' + dividir[1] + 'T' + dividir[2],
           ahora = Fecha.ahora();
       
       return parseInt((Date.parse(ISOdate) - ahora) / 1000);

Valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô: 44380233.

Ejemplo 6: eliminar propiedades JSON

Modifique la estructura de datos JSON eliminando cualquier propiedad con la clave "data_size" o "index_size".

var obj=JSON.parse(valor);
       
       para (i = 0; i < Object.keys(obj).length; i++) {
           eliminar obj[i]["data_size"];
           eliminar obj[i]["index_size"];
       }
       
       devolver JSON.stringify (obj)

Valor aceptado por la ´Ú³Ü²Ô³¦¾±¨®²Ô:

[
           {
               "table_name": "historial",
               "tama?o_datos": "326.05",
               "index_size": "174,34"
           },
           {
               "table_name": "history_log",
               "tama?o_datos": "6.02",
               "index_size": "3,45"
           }
       ]

Valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô:

[
           {
               "nombre_tabla": "historial"
           },
           {
               "nombre_tabla": "registro_historial"
           }
       ]
Ejemplo 7: convertir el estado de Apache a JSON

Convierta el valor recibido de un elemento del agente Áú»¢¶Ä²© web.page.get (por ejemplo, web.page.get[http://127.0.0.1 :80/server-status?auto]) a un objeto JSON.

// Convertir el estado de Apache a JSON
       
       // Divide el valor en subcadenas y coloca estas subcadenas en una matriz
       var ±ô¨ª²Ô±ð²¹²õ = valor.split('\n');
       
       // Crea un objeto vac¨ªo "salida"
       var salida = {};
       
       // Crea un objeto "trabajadores" con propiedades predefinidas
       var trabajadores = {
           '_': 0, 'S': 0, 'R': 0, 'W': 0,
           'K': 0, 'D': 0, 'C': 0, 'L': 0,
           'G': 0, 'I': 0, '.': 0
       };
       
       // Agrega las subcadenas de la matriz "±ô¨ª²Ô±ð²¹²õ" al objeto "salida" como propiedades (pares clave-valor)
       for (var i = 0; i < ±ô¨ª²Ô±ð²¹²õ.longitud; i++) {
           var ±ô¨ª²Ô±ð²¹ = ±ô¨ª²Ô±ð²¹²õ[i].match(/([A-z0-9 ]+): (.*)/);
       
           si (±ô¨ª²Ô±ð²¹! == nulo) {
               salida[±ô¨ª²Ô±ð²¹[1]] = isNaN(±ô¨ª²Ô±ð²¹[2])? ±ô¨ª²Ô±ð²¹[2] : ±·¨²³¾±ð°ù´Ç(±ô¨ª²Ô±ð²¹[2]);
           }
       }
       
       // ²Ñ¨¦³Ù°ù¾±³¦²¹s multiversi¨®n
       salida.ServerUptimeSeconds = salida.ServerUptimeSeconds || salida.Tiempo de actividad;
       salida.ServerVersion = salida.ServerVersion || salida.Servidor;
       
       // Analiza la propiedad "Marcador" para obtener el recuento de trabajadores
       if (tipo de salida.Scoreboard === 'cadena') {
           for (var i = 0; i < salida.Scoreboard.length; i++) {
               var char = salida.Scoreboard[i];
       
               trabajadores[char]++;
           }
       }
       
       // Agrega datos del trabajador al objeto "salida"
       salida.Trabajadores = {
           esperando: trabajadores['_'], comenzando: trabajadores['S'], leyendo: trabajadores['R'],
           enviando: trabajadores['W'], keepalive: trabajadores['K'], dnslookup: trabajadores['D'],
           cierre: trabajadores['C'], registro: trabajadores['L'], acabado: trabajadores['G'],
           limpieza: trabajadores['I'], espacio: trabajadores['.']
       };
       
       // Devuelve cadena JSON
       devolver JSON.stringify(salida);

Valor aceptado por la ´Ú³Ü²Ô³¦¾±¨®²Ô:

HTTP/1.1 200 correcto
       Fecha: lunes 27 de marzo de 2023 11:08:39 GMT
       Servidor: Apache/2.4.52 (Ubuntu)
       Variar: aceptar-codificaci¨®n
       Codificaci¨®n de contenido: gzip
       Longitud del contenido: 405
       Tipo de contenido: texto/sin formato; juego de caracteres=ISO-8859-1
       
       127.0.0.1
       Versi¨®n del servidor: Apache/2.4.52 (Ubuntu)
       ServidorMPM: prefork
       Servidor construido: 2023-03-08T17:32:01
       Hora actual: lunes, 27 de marzo de 2023 14:08:39 EEST
       Hora de reinicio: lunes 27 de marzo de 2023 12:19:59 EEST
       ParentServerConfigGeneraci¨®n: 1
       ParentServerMPMGeneraci¨®n: 0
       Tiempo de actividad del servidor Segundos: 6520
       Tiempo de actividad del servidor: 1 hora 48 minutos 40 segundos
       Carga1: 0,56
       Carga5: 0,33
       Carga15: 0,28
       Accesos totales: 2476
       kBytes totales: 8370
       Duraci¨®n total: 52718
       Usuario de CPU: 8.16
       CPUSistema: 3.44
       CPUNi?osUsuario: 0
       CPUNi?osSistema: 0
       Carga de CPU: .177914
       Tiempo de actividad: 6520
       Solicitud por segundo: .379755
       Bytes por segundo: 3461,58
       Bytes por solicitud: 3461,58
       Duraci¨®n por solicitud: 21,2916
       Trabajadores ocupados: 2
       Trabajadores inactivos: 6
       Marcador: ____KW__................................................ ................................................. .................................................

Valor devuelto por la ´Ú³Ü²Ô³¦¾±¨®²Ô:

{
           "Fecha": "lunes, 27 de marzo de 2023 11:08:39 GMT",
           "Servidor": "Apache/2.4.52 (Ubuntu)",
           "Variar": &±ç³Ü´Ç³Ù;´¡³¦±ð±è³Ù²¹°ù-°ä´Ç»å¾±´Ú¾±³¦²¹³¦¾±¨®²Ô&±ç³Ü´Ç³Ù;,
           &±ç³Ü´Ç³Ù;°ä´Ç»å¾±´Ú¾±³¦²¹³¦¾±¨®²Ô&±ç³Ü´Ç³Ù;: "gzip",
           "Longitud": 405,
           "Tipo": "texto/sin formato; juego de caracteres=ISO-8859-1",
           "ServerVersion": "Apache/2.4.52 (Ubuntu)",
           "ServerMPM": "prefork",
           "Servidor construido": "2023-03-08T17:32:01",
           "CurrentTime": "Lunes, 27 de marzo de 2023 14:08:39 EEST",
           "RestartTime": "Lunes, 27 de marzo de 2023 12:19:59 EEST",
           "ParentServerConfigGeneration": 1,
           &±ç³Ü´Ç³Ù;±Ê²¹°ù±ð²Ô³Ù³§±ð°ù±¹±ð°ù²Ñ±Ê²Ñ³Ò±ð²Ô±ð°ù²¹³¦¾±¨®²Ô&±ç³Ü´Ç³Ù;: 0,
           "ServidorUptimeSeconds": 6520,
           "ServerUptime": "1 hora 48 minutos 40 segundos",
           "Carga1": 0,56,
           "Carga5": 0,33,
           "Carga15": 0,28,
           ¡°´¡³¦³¦±ð²õ´Ç²õ °Õ´Ç³Ù²¹±ô±ð²õ¡±: 2476,
           "KBytes totales": 8370,
           "Duraci¨®n total": 52718,
           "CPUUser": 8.16,
           "Sistema CPU": 3.44,
           "CPUChildrenUser": 0,
           "CPUChildrenSystem": 0,
           "Carga de CPU": 0,177914,
           "Tiempo de actividad": 6520,
           "ReqPerSec": 0,379755,
           "BytesPorSec": 1314,55,
           "BytesPorReq": 3461,58,
           &±ç³Ü´Ç³Ù;¶Ù³Ü°ù²¹³¦¾±¨®²Ô±Ê´Ç°ù¸é±ð±ç&±ç³Ü´Ç³Ù;: 21.2916,
           "Trabajadores ocupados": 2,
           "Trabajadores inactivos": 6,
           "Marcador": "____KW__................................................ ................................................. ................................................",
           "Trabajadores": {
               "esperando": 6,
               "empezando": 0,
               "lectura": 0,
               "enviando": 1,
               "mantener vivo": 1,
               "b¨²squeda dns": 0,
               "cierre": 0,
               "registro": 0,
               "acabado": 0,
               "limpieza": 0,
               "ranura": 142
           }
       }