

# Métodos de ayuda generales
<a name="general-helper-methods"></a>

Esta página proporciona métodos de ayuda adicionales en CloudFront Functions. Para usar estos métodos, cree una función de CloudFront con tiempo de ejecución 2.0 de JavaScript.

```
import cf from 'cloudfront';
```

Para obtener más información, consulte [Características del tiempo de ejecución 2.0 de JavaScript para CloudFront Functions](functions-javascript-runtime-20.md).

## `edgeLocation`Metadatos de
<a name="edge-location-metadata"></a>

Este método requiere el uso del modulo `cloudfront`.

**nota**  
Solo puede utilizar este método para las funciones de solicitud del espectador. Para las funciones de respuesta del espectador, este método está vacío.

Utilice este objeto de JavaScript para obtener el código del aeropuerto de ubicación periférica, la región de [Caché periférica regional](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches) prevista o la dirección IP del servidor de CloudFront utilizada para gestionar la solicitud. Estos metadatos solo están disponibles cuando el espectador solicita desencadenar el evento.

```
cf.edgeLocation = {
    name: SEA
    serverIp: 1.2.3.4
    region: us-west-2
}
```

El objeto `cf.edgeLocation` puede incluir lo siguiente:

**name**  
El [código IATA](https://en.wikipedia.org/wiki/IATA_airport_code) de tres letras de la ubicación periférica que gestionó la solicitud.

**serverIp**  
Dirección IPv4 o IPv6 del servidor que gestionó la solicitud.

**region**  
La caché periférica regional (REC) de CloudFront que se *espera* que utilice la solicitud en caso de falta de memoria caché. Este valor no se actualiza en caso de que el REC esperado no esté disponible y se utilice un REC de copia de seguridad para la solicitud. Esto no incluye la ubicación de Origin Shield que se utilice, excepto en los casos en que el REC principal y el Origin Shield estén en la misma ubicación.

**nota**  
CloudFront Functions no se invoca por segunda vez cuando CloudFront está configurado para usar la conmutación por error de origen. Para obtener más información, consulte [Optimización de alta disponibilidad con conmutación por error de origen de CloudFront](high_availability_origin_failover.md).

## `rawQueryString()`Método de
<a name="raw-query-string-method"></a>

Este método no requiere el módulo `cloudFront`.

Utilice el método `rawQueryString()` para recuperar la cadena de consulta no analizada y no modificada como una cadena.

**Solicitud**

```
function handler(event) {
    var request = event.request;
    const qs = request.rawQueryString();
}
```

**Respuesta**

Devuelve la cadena de consulta completa de la solicitud entrante como un valor de cadena sin `?` al principio. 
+ Si no hay una cadena de consulta, pero `?` está presente, la función devuelve una cadena vacía. 
+ Si no hay una cadena de consulta y `?` no está presente, la función devuelve `undefined`.

**Caso 1: se devuelve la cadena de consulta completa (sin `?` al principio)**  
URL de solicitud entrante: `https://example.com/page?name=John&age=25&city=Boston`  
`rawQueryString()` devuelve: `"name=John&age=25&city=Boston"`

**Caso 2: se devuelve una cadena vacía (cuando `?` está presente pero sin parámetros)**  
URL de solicitud entrante: `https://example.com/page?`  
`rawQueryString()` devuelve: `""`

**Caso 3: se devuelve `undefined` (sin cadena de consulta ni `?`)**  
URL de solicitud entrante: `https://example.com/page`  
`rawQueryString()` devuelve: `undefined`

## `logCustomData()`Método de
<a name="log-custom-data-method"></a>

Para usar este método, importe el módulo `cloudfront`.

Utilice el método `logCustomData()` para enviar datos personalizados desde la función de Amazon CloudFront a los registros de acceso de CloudFront. Los datos se escriben en el campo de registro `viewer-request-log-data` o `viewer-response-log-data`, en función de si la función está asociada a una solicitud del espectador o a un evento de respuesta del espectador.

El método acepta un único argumento de cadena. Para registrar un objeto, utilice primero `JSON.stringify()` para convertirlo en una cadena. Por ejemplo:

```
const resp_obj = JSON.stringify(some_obj);
cf.logCustomData(resp_obj);
```

Cada campo admite hasta 800 bytes de datos. CloudFront codifica automáticamente la URL de los datos antes de escribirlos en el campo de registro. CloudFront trunca los datos que superen los 800 bytes después de la codificación de URL. Si la función llama a `logCustomData()` varias veces en una sola ejecución, CloudFront usa solo el último valor.

**Adición de campos a la configuración de registro**  
Para recibir estos datos en los registros de acceso de CloudFront, debe agregar los campos `viewer-request-log-data` o `viewer-response-log-data` a la configuración de [registro en tiempo real](real-time-logs.md) o a la configuración de [registro estándar (v2)](standard-logging.md).

**Diferencia con console.log()**  
El método `logCustomData()` no sustituye a `console.log()` para CloudFront Functions. Use `console.log()` para enviar líneas de registro a Registros de Amazon CloudWatch. Use `cf.logCustomData()` para escribir datos personalizados en los registros de acceso de CloudFront ([registros en tiempo real](real-time-logs.md) y [registros estándar (v2)](standard-logging.md)). Puede usar ambos métodos en la misma función. Para obtener más información, consulte [Registros de CloudFront Functions](edge-functions-logs.md).

El método utiliza la siguiente sintaxis:

```
cf.logCustomData(String);
```

**Example Registro de un encabezado en una función de solicitud del espectador**  

```
import cf from 'cloudfront';

function handler(event) {
    var request = event.request;

    // Check if the debug header exists, if so log it
    if (request.headers['x-debug-header']) {
        // Log the debug header value
        cf.logCustomData("debug header found: " + request.headers['x-debug-header'].value);
    }

    return request;
}
```