

# 通用辅助方法
<a name="general-helper-methods"></a>

本页面提供了 CloudFront Functions 中的其他辅助方法。要使用这些方法，请使用 JavaScript 运行时 2.0 创建 CloudFront 函数。

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

有关更多信息，请参阅[适用于 CloudFront Functions 的 JavaScript 运行时系统 2.0 特征](functions-javascript-runtime-20.md)。

## `edgeLocation` 元数据
<a name="edge-location-metadata"></a>

此方法需要使用 `cloudfront` 模块。

**注意**  
您只能将此方法用于查看器-请求函数。对于查看器-响应函数，此方法为空。

使用此 JavaScript 对象可获取边缘站点机场代码、预期的[区域边缘缓存](HowCloudFrontWorks.md#CloudFrontRegionaledgecaches)区域，或用于处理请求的 CloudFront 服务器 IP 地址。此元数据仅在查看器请求事件触发时可用。

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

`cf.edgeLocation` 对象可包含：

**name**  
处理请求的边缘站点的三字母 [IATA 代码](https://en.wikipedia.org/wiki/IATA_airport_code)。

**serverIp**  
处理请求的服务器的 IPv4 或 IPv6 地址。

**region**  
发生缓存未命中时请求*预计*会使用的 CloudFront 区域边缘缓存（REC）。如果预期的 REC 不可用且请求使用备用 REC，则不会更新此值。这不包括正在使用的源护盾位置，除非主 REC 和源护盾的位置相同。

**注意**  
如果 CloudFront 已配置为使用源失效转移，则不会再次调用 CloudFront Functions。有关更多信息，请参阅[通过 CloudFront 源失效转移来优化高可用性](high_availability_origin_failover.md)。

## `rawQueryString()` 方法
<a name="raw-query-string-method"></a>

此方法不需要 `cloudFront` 模块。

使用 `rawQueryString()` 方法可以字符串形式检索未解析和未更改的查询字符串。

**请求**

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

**响应**

以不带前导 `?` 的字符串值形式返回传入请求的完整查询字符串。
+ 如果没有查询字符串，但存在 `?`，则函数将返回一个空字符串。
+ 如果没有查询字符串且 `?` 不存在，则函数将返回 `undefined`。

**场景 1：返回完整查询字符串（不带前导 `?`）**  
传入请求 URL：`https://example.com/page?name=John&age=25&city=Boston`  
`rawQueryString()` 返回：`"name=John&age=25&city=Boston"`

**场景 2：返回空字符串（当 `?` 存在但没有参数时）**  
传入请求 URL：`https://example.com/page?`  
`rawQueryString()` 返回：`""`

**场景 3：返回 `undefined`（无查询字符串和 `?`）**  
传入请求 URL：`https://example.com/page`  
`rawQueryString()` 返回：`undefined`