Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / /

上下文

在此页面上

  • 获取应用元数据 (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 对象公开以下接口:

属性
说明
context.app
访问有关运行该功能的应用的元数据。
访问环境值和当前环境标签。
调用应用的函数的客户端对象。
一个内置 HTTP 客户端。
说明触发函数调用的传入请求。
公开可访问数据源和服务的客户端对象。
描述发起请求的用户。
包含静态全局值。

context.app 对象包含有关包含该函数的应用的元数据。

{
"id": string,
"clientAppId": string,
"name": string,
"projectId": string,
"deployment": {
"model": string,
"providerRegion": string,
},
"lastDeployed": string,
"hostingUri": string,
}

包含该函数的应用的唯一内部 ID。

"60c8e59866b0c33d14ee634a"

包含该函数的应用程序的唯一客户端应用程序 ID。

"myapp-abcde"

包含该函数的应用的名称。

"myapp"

包含该应用的 Atlas 项目的 ID。

"5e1ec444970199272441a214"

描述应用的部署模式和地区的对象。

{
"model": "LOCAL",
"providerRegion": "aws-us-east-1"
}

上次部署应用的日期和时间,格式为ISODate string 。

"2022-10-31T12:00:00.000Z"

如果启用了静态托管,则此值为托管资产的基本URL 。 (静态托管已弃用。 了解详情。)

"myapp-abcde.mongodbstitch.com"

您可以通过 context.functions 接口调用应用程序中的任何函数

调用特定函数并返回结果。

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接口访问权限有关应用的当前环境配置的信息并访问权限特定于环境的值。

以字符串表示的应用当前环境的名称。

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"
}
}
};

一个对象,其中每个字段都将环境值的名称映射到其在当前环境中的值。

exports = async function() {
const baseUrl = context.environment.values.baseUrl
};

您可以通过 context.services 接口访问关联的 MongoDB Atlas 集群或联合数据源的客户端。

获取指定服务的服务客户端,如果不存在此类服务,则获取 undefined

context.services.get(serviceName)
Parameter
类型
说明
serviceName
字符串

关联集群、联合数据库实例或服务的名称。

应用程序创建的链接数据源使用以下默认名称之一:

  • 集群: mongodb-atlas

  • 联合数据库实例: mongodb-datafederation

在 MongoDB Atlas 中读取和写入数据
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 接口不包含请求正文有效负载。

一个对象,其中包含有关导致函数执行的 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会自动删除键为 secret 的任何查询string键/值对。 示例,如果传入请求具有查询string ?secret=hello&someParam=42,则该请求的 rawQueryString"someParam=42"

httpReferrer
字符串

可选。从中发送请求的页面的 URL。

该值派生自HTTP 标头 。如果请求不包含Referer标头,则此值为undefined

httpUserAgent
字符串

可选。标识请求来源的特征信息,例如软件供应商、操作系统或应用程序类型。

该值派生自 HTTP User-Agent 标头 。如果请求不包含User-Agent标头,则此值为undefined

以下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 接口调用函数的应用程序或系统用户的信息。

调用函数的经过身份验证的用户的用户对象。

{
"id": <string>,
"type": <string>,
"data": <document>,
"identities": <array>
}
字段
类型
说明
id
字符串
ObjectId 的字符串表示形式,用于唯一标识用户。
type
字符串

用户的类型。可以有以下几种类型:

类型
说明
“normal”
用户是通过 API 密钥提供程序以外的身份验证提供程序登录的应用程序用户。
“server”
用户是使用任何类型的 App Services API 密钥登录的服务器进程。
“system”
用户是绕过所有规则的系统用户。
data
文档

包含描述用户的元数据的文档。此字段合并与用户相关联的所有 identities 的数据,因此确切的字段名称和值取决于用户使用哪些身份验证提供程序进行身份验证。

在系统函数中, user.data对象为空。 使用context.runningAsSystem()测试函数是否以系统用户身份运行。

custom_data
文档

应用程序的自定义用户数据集合中的一个文档,用于指定用户的ID。 您可以使用自定义用户数据集合来存储有关应用程序用户的任意数据。 如果设立name字段, App Services将使用返回值name填充username元数据字段。 每当用户刷新其访问权限令牌(例如登录时), App Services都会自动获取数据的新副本。 根本的数据是普通的MongoDB 文档,因此您可以通过 服务使用标准CRUD MongoDB Atlas操作来定义和修改用户的自定义数据。

自定义用户数据限制为 16MB,即 MongoDB 文档的最大大小。为避免达到此限制,请考虑在每个自定义用户数据文档中存储小型且相对静态的用户数据,例如用户的首选语言或其头像图像的 URL。对于大型、无界限或频繁更新的数据,请考虑仅在自定义用户文档中存储对数据的引用,或存储带有对用户 ID 的引用的数据,而不是存储在自定义用户文档中。

identities
阵列

与用户关联的身份验证提供者身份列表。当用户首次使用特定提供商登录时,App Services 会将用户与身份对象关联起来,该身份对象包含唯一标识符以及来自提供商的有关用户的其他元数据。对于后续登录,App Services 会刷新现有身份数据,但不会创建新身份。身份对象具有以下形式:

{
"id": "<Unique ID>",
"provider_type": "<Provider Name>",
"data": {
"<Metadata Field>": <Value>,
...
}
}
字段名称
说明
id
提供商生成的string ,用于唯一标识此身份。
provider_type
与此身份关联的身份验证提供者的类型。
data
身份验证提供程序中描述用户的附加元数据。确切的字段名称和值将根据用户登录所使用的身份验证提供程序而异。

如果函数以系统用户身份运行,则计算结果为布尔值true

exports = function() {
const isSystemUser = context.runningAsSystem()
if(isSystemUser) {
// Do some work with the system user.
} else {
// Fail.
}
}

您可以使用 context.values 接口在函数中访问应用的静态

获取与提供的值名称或 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"
};

您可以通过具有 context.http 接口的内置客户端发送 HTTPS 请求。

发送 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());
};

发送 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());
};

发送 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());
};

发送 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());
};

发送 HTTP DELETE 请求到指定的URL。有关详细的参考信息,包括参数定义和返回类型,请参阅http.delete()

exports = async function() {
const response = await context.http.delete({ url: "https://www.example.com/user/8675309" })
};

发送 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());
};

后退

功能