上下文
在此页面上
- 获取应用元数据 (
context.app
) - 上下文。 应用.id
- 上下文。 应用.clientAppId
- 上下文。 应用.name
- 上下文。 应用.projectId
- 上下文。应用。部署
- 上下文。 应用.lastDeployed
- 上下文。 应用.hostingUri
- 调用函数 (
context.functions
) - context.functions.execute()
- 检查应用环境 (
context.environment
) - context.environment。标签
- context.environment.values
- 连接到 MongoDB 数据源或第三方服务 (
context.services
) - context.services.get()
- 获取请求元数据 (
context.request
) - context.request
- 获取用户数据 (
context.user
) - context.user
- context.runningAsSystem()
- 参考一个值 (
context.values
) - context.values.get(valueName)
- 发送 HTTP 请求 (
context.http
) - context.http.get()
- context.http.post()
- context.http.put()
- context.http.patch()
- context.http。 删除()
- context.http.head()
Atlas Function 可以访问权限全局 context
对象,该对象包含传入请求的元数据,并提供对应用中组件和服务的访问权限。
context
对象公开以下接口:
属性 | 说明 |
---|---|
访问有关运行该功能的应用的元数据。 | |
访问环境值和当前环境标签。 | |
调用应用的函数的客户端对象。 | |
一个内置 HTTP 客户端。 | |
说明触发函数调用的传入请求。 | |
公开可访问数据源和服务的客户端对象。 | |
描述发起请求的用户。 | |
包含静态全局值。 |
获取应用元数据context.app
()
context.app
对象包含有关包含该函数的应用的元数据。
{ "id": string, "clientAppId": string, "name": string, "projectId": string, "deployment": { "model": string, "providerRegion": string, }, "lastDeployed": string, "hostingUri": string, }
上下文。 应用.id
包含该函数的应用的唯一内部 ID。
"60c8e59866b0c33d14ee634a"
上下文。 应用.clientAppId
包含该函数的应用程序的唯一客户端应用程序 ID。
"myapp-abcde"
上下文。 应用.name
包含该函数的应用的名称。
"myapp"
上下文。 应用.projectId
包含该应用的 Atlas 项目的 ID。
"5e1ec444970199272441a214"
上下文。应用。部署
描述应用的部署模式和地区的对象。
{ "model": "LOCAL", "providerRegion": "aws-us-east-1" }
上下文。 应用.lastDeployed
上次部署应用的日期和时间,格式为ISODate string 。
"2022-10-31T12:00:00.000Z"
上下文。 应用.hostingUri
如果启用了静态托管,则此值为托管资产的基本URL 。 (静态托管已弃用。 了解详情。)
"myapp-abcde.mongodbstitch.com"
调用函数context.functions
()
您可以通过 context.functions
接口调用应用程序中的任何函数。
context.functions.execute()
调用特定函数并返回结果。
context.functions.execute(functionName, ...args)
Parameter | 类型 | 说明 |
---|---|---|
functionName | 字符串 | 函数的名称。 |
args ... | 混合 | 要传递给函数的参数的可变列表。每个函数参数都映射到一个单独的、以逗号分隔的参数。 |
// difference: subtracts b from a using the sum function exports = function(a, b) { return context.functions.execute("sum", a, -1 * b); };
检查应用环境context.environment
()
您可以通过context.environment
接口访问权限有关应用的当前环境配置的信息并访问权限特定于环境的值。
context.environment。标签
以字符串表示的应用当前环境的名称。
Possible values:
""
"development"
"testing"
"qa"
"production"
exports = async function() { switch(context.environment.tag) { case "": { return "There is no current environment" } case "development": { return "The current environment is development" } case "testing": { return "The current environment is testing" } case "qa": { return "The current environment is qa" } case "production": { return "The current environment is production" } } };
context.environment.values
一个对象,其中每个字段都将环境值的名称映射到其在当前环境中的值。
exports = async function() { const baseUrl = context.environment.values.baseUrl };
连接到MongoDB数据源或第三方服务 (context.services
)
您可以通过 context.services
接口访问关联的 MongoDB Atlas 集群或联合数据源的客户端。
context.services.get()
获取指定服务的服务客户端,如果不存在此类服务,则获取 undefined
。
context.services.get(serviceName)
Parameter | 类型 | 说明 |
---|---|---|
serviceName | 字符串 | 关联集群、联合数据库实例或服务的名称。 应用程序创建的链接数据源使用以下默认名称之一:
|
exports = async function() { // Get the cluster's data source client const mdb = context.services.get("mongodb-atlas"); // Reference a specific database/collection const db = mdb.db("myApp"); const collection = db.collection("myCollection"); // Run a MongoDB query return await collection.find({ name: "Rupert", age: { $lt: 50 }, }) };
获取请求元数据 (context.request
)
您可以通过 context.request 接口访问传入请求的相关信息。
提示
context.request
接口不包含请求正文有效负载。
context.request
一个对象,其中包含有关导致函数执行的 HTTP 请求的信息。
{ "remoteIPAddress": <string>, "requestHeaders": <object>, "webhookUrl": <string>, "httpMethod": <string>, "rawQueryString": <string>, "httpReferrer": <string>, "httpUserAgent": <string>, "service": <string>, "action": <string> }
字段 | 类型 | 说明 |
---|---|---|
remoteIPAddress | 字符串 | 发出函数请求的客户端 IP 地址。 |
requestHeaders | 对象 | 一个对象,其中每个字段都映射到一种HTTP标头 ,该标头包含在导致函数执行的请求中。string每个字段的值都是一个字符串大量,其中每个字符串都映射到请求中包含的指定类型的标头。 |
webhookUrl | 字符串 | 可选。 在 HTTPS 端点函数中,指端点的路由。 |
httpMethod | 字符串 | 可选。 在 HTTPS 端点函数中, HTTP方法 调用端点的请求的 ID。 |
rawQueryString | 字符串 | 查询string 附加到传入的HTTP 请求。所有查询参数的显示顺序均与指定顺序相同。 重要提示! 出于安全考虑, Atlas会自动删除键为 |
httpReferrer | 字符串 | 可选。从中发送请求的页面的 URL。 该值派生自HTTP 标头 。如果请求不包含 |
httpUserAgent | 字符串 | 可选。标识请求来源的特征信息,例如软件供应商、操作系统或应用程序类型。 该值派生自 HTTP User-Agent 标头 。如果请求不包含 |
以下context.request
文档反映了在 macOS High Sierra 上使用 Chrome 73浏览的用户从https://myapp.example.com/
发出的函数调用:
exports = function() { return context.request }
{ "remoteIPAddress": "54.173.82.137", "httpReferrer": "https://myapp.example.com/", "httpUserAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.103 Safari/537.36", "rawQueryString": "?someParam=foo&anotherParam=42", "requestHeaders": { "Content-Type": ["application/json"], "Cookie": [ "someCookie=someValue", "anotherCookie=anotherValue" ] } }
获取用户数据context.user
()
您可以访问有关使用 context.user
接口调用函数的应用程序或系统用户的信息。
context.user
调用函数的经过身份验证的用户的用户对象。
{ "id": <string>, "type": <string>, "data": <document>, "identities": <array> }
字段 | 类型 | 说明 | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
id | 字符串 | ObjectId 的字符串表示形式,用于唯一标识用户。 | ||||||||||||||||
type | 字符串 | 用户的类型。可以有以下几种类型:
| ||||||||||||||||
data | 文档 | 包含描述用户的元数据的文档。此字段合并与用户相关联的所有 在系统函数中, | ||||||||||||||||
custom_data | 文档 | 应用程序的自定义用户数据集合中的一个文档,用于指定用户的ID。 您可以使用自定义用户数据集合来存储有关应用程序用户的任意数据。 如果设立 自定义用户数据限制为 | ||||||||||||||||
identities | 阵列 | 与用户关联的身份验证提供者身份列表。当用户首次使用特定提供商登录时,App Services 会将用户与身份对象关联起来,该身份对象包含唯一标识符以及来自提供商的有关用户的其他元数据。对于后续登录,App Services 会刷新现有身份数据,但不会创建新身份。身份对象具有以下形式:
|
context.runningAsSystem()
如果函数以系统用户身份运行,则计算结果为布尔值true
。
exports = function() { const isSystemUser = context.runningAsSystem() if(isSystemUser) { // Do some work with the system user. } else { // Fail. } }
引用值context.values
()
您可以使用 context.values
接口在函数中访问应用的静态值。
context.values.get(valueName)
获取与提供的值名称或 undefined
关联的数据(如果不存在此类值)。此数据可以是纯文本 JSON 值,也可以是通过值公开的密钥。
Parameter | 类型 | 说明 |
---|---|---|
valueName | 字符串 | 值的名称。 |
exports = function() { // Get a global value (or `undefined` if no Value has the specified name) const theme = context.values.get("theme"); console.log(theme.colors) // Output: { red: "#ee1111", blue: "#1111ee" } console.log(theme.colors.red) // Output: "#ee1111" };
发送HTTP请求context.http
()
您可以通过具有 context.http
接口的内置客户端发送 HTTPS 请求。
context.http.get()
发送 HTTP GET 请求到指定的URL。有关详细的参考信息,包括参数定义和返回类型,请参阅http.get()
。
exports = async function() { const response = await context.http.get({ url: "https://www.example.com/users" }) // The response body is a BSON.Binary object. Parse it and return. return EJSON.parse(response.body.text()); };
context.http.post()
发送 HTTP POST 请求到指定的URL。有关详细的参考信息,包括参数定义和返回类型,请参阅http.post()
。
exports = async function() { const response = await context.http.post({ url: "https://www.example.com/messages", body: { msg: "This is in the body of a POST request!" }, encodeBodyAsJSON: true }) // The response body is a BSON.Binary object. Parse it and return. return EJSON.parse(response.body.text()); };
context.http.put()
发送 HTTP PUT 请求到指定的URL。有关详细的参考信息,包括参数定义和返回类型,请参阅http.put()
。
exports = async function() { const response = await context.http.put({ url: "https://www.example.com/messages", body: { msg: "This is in the body of a PUT request!" }, encodeBodyAsJSON: true }) // The response body is a BSON.Binary object. Parse it and return. return EJSON.parse(response.body.text()); };
context.http.patch()
发送 HTTP PATCH 请求到指定的URL。有关详细的参考信息,包括参数定义和返回类型,请参阅http.patch()
。
exports = async function() { const response = await context.http.patch({ url: "https://www.example.com/diff.txt", body: { msg: "This is in the body of a PATCH request!" }, encodeBodyAsJSON: true }) // The response body is a BSON.Binary object. Parse it and return. return EJSON.parse(response.body.text()); };
context.http。 删除()
发送 HTTP DELETE 请求到指定的URL。有关详细的参考信息,包括参数定义和返回类型,请参阅http.delete()
。
exports = async function() { const response = await context.http.delete({ url: "https://www.example.com/user/8675309" }) };
context.http.head()
发送 HTTP HEAD 请求到指定的URL。有关详细的参考信息,包括参数定义和返回类型,请参阅http.head()
。
exports = async function() { const response = await context.http.head({ url: "https://www.example.com/users" }) // The response body is a BSON.Binary object. Parse it and return. EJSON.parse(response.body.text()); };