Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
Funciones

Context

Las funciones Atlas tienen acceso a un global context objeto que contiene metadatos para las solicitudes entrantes y proporciona acceso a los componentes y servicios que ha configurado en su aplicación App Services.

El objeto context expone las siguientes interfaces:

Propiedad
Descripción

Acceda a metadatos sobre la aplicación que ejecuta la función.

Acceda a los valores del entorno y a la etiqueta del entorno actual.

Un objeto cliente que llama a las funciones de su aplicación.

Un cliente HTTP incorporado.

Describe la solicitud entrante que activó una llamada a función.

Expone objetos de cliente que pueden acceder a fuentes de datos y servicios.

Describes the authenticated user that initiated the request.

Contiene valores.globales estáticos

El objeto context.app contiene metadatos sobre la aplicación que contiene la función.

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

El ID interno único de la aplicación que contiene la función.

Ejemplo

"60c8e59866b0c33d14ee634a"
context.app.clientAppId

El ID único de la aplicación de cliente para la aplicación que contiene la función.

Ejemplo

"myapp-abcde"
context.app.name

El nombre de la aplicación que contiene la función.

Ejemplo

"myapp"
context.app.projectId

El ID del Proyecto Atlas que contiene la aplicación.

Ejemplo

"5e1ec444970199272441a214"
context.app.deployment

Un objeto que describe el modelo y la región de implementación de la aplicación.

Ejemplo

{
"model": "LOCAL",
"providerRegion": "aws-us-east-1"
}
context.app.lastDeployed

La fecha y hora en que la Atlas aplicación se implementó por última vez, con formato de string ISODate.

Ejemplo

"2022-10-31T12:00:00.000Z"
context.app.hostingUri

Si el alojamiento estático está habilitado, este valor es la URL base para los recursos alojados. (El alojamiento estático está obsoleto. Más información)

Ejemplo

"myapp-abcde.mongodbstitch.com"

Puede llamar a cualquier función en su aplicación a través de la context.functions interfaz.

context.functions.execute()

Calls a specific function and returns the result.

context.functions.execute(functionName, ...args)
Parameter
Tipo
Descripción

functionName

string

El nombre de la función.

args...

mixto

A variadic list of arguments to pass to the function. Each function parameter maps to a separate, comma-separated argument.

Ejemplo

// difference: subtracts b from a using the sum function
exports = function(a, b) {
return context.functions.execute("sum", a, -1 * b);
};

You can access information about your App's current environment configuration and access environment-specific values through the context.environment interface.

context.environment.tag

El nombre del entorno actual de la aplicación como una cadena.

Possible values:

  • ""

  • "development"

  • "testing"

  • "qa"

  • "production"

Ejemplo

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

Un objeto donde cada campo asigna el nombre de un valor de entorno a su valor en el entorno actual.

Ejemplo

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

Puede acceder a un cliente de un clúster de MongoDB Atlas vinculado o una fuente de datos federada a través de la interfaz context.services. También puede acceder a servicios de terceros, aunque esta función está obsoleta.

context.services.get()

Obtiene un cliente de servicio para el servicio especificado o undefined si no existe tal servicio.

context.services.get(serviceName)
Parameter
Tipo
Descripción

serviceName

string

El nombre del clúster vinculado, instancia federada de base de datos o servicio.

Tip

MongoDB Service Names

Linked data sources created by your app use one of the following default names:

  • Clúster: mongodb-atlas

  • instancia federada de base de datos: mongodb-datafederation

Ejemplo

Leer y guardar datos en 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 },
})
};
Llamar a acciones de servicios de terceros
exports = async function() {
// Instantiate a service client for the HTTP Service named "myHttpService"
const http = context.services.get("myHttpService");
// Call the HTTP service's get() action
try {
const response = await http.get({ url: "https://www.mongodb.com" });
return response.body.text()
} catch(err) {
// You might get an error if:
// - you passed invalid arguments
// - the service's rules prevent the action
console.error(err)
}
};

Puede acceder a la información sobre la solicitud entrante con el Interfaz context.request.

Tip

La interfaz context.request no incluye las cargas útiles del cuerpo de la solicitud. En las funciones de punto final HTTPS, se puede acceder al cuerpo de la solicitud y a otros detalles de la misma desde el argumento request proporcionado.

context.request

An object that contains information about the HTTP request that caused the function to execute.

{
"remoteIPAddress": <string>,
"requestHeaders": <object>,
"webhookUrl": <string>,
"httpMethod": <string>,
"rawQueryString": <string>,
"httpReferrer": <string>,
"httpUserAgent": <string>,
"service": <string>,
"action": <string>
}
Campo
Tipo
Descripción

remoteIPAddress

string

La dirección IP del cliente que emitió la solicitud de la Función.

requestHeaders

Objeto

Un objeto donde cada campo se asigna a un tipo de encabezado HTTP que se incluyó en la solicitud que provocó la ejecución de la función. El valor de cada campo es una matriz de cadenas, donde cada cadena se asigna a un encabezado del tipo especificado incluido en la solicitud.

Ejemplo

{
"requestHeaders": {
"Content-Type": ["application/json"],
"Cookie": [
"someCookie=someValue",
"anotherCookie=anotherValue"
]
}
}

webhookUrl

string

Opcional. En las funciones de punto final HTTPS, la ruta del punto final.

httpMethod

string

Opcional. En las funciones de punto final HTTPS, el método HTTP de la solicitud que llamó al punto final.

rawQueryString

string

El string del query adjunto a la solicitud HTTP entrante. Todos los parámetros de la query aparecen en el mismo orden en que se especificaron.

Importante

App Services elimina el parámetro secreto

Por razones de seguridad, Atlas App Services remueve automáticamente cualquier par clave/valor de string de consulta donde la clave sea secret. Por ejemplo, si una solicitud entrante contiene la string del query ?secret=hello&someParam=42, entonces el rawQueryString para esa solicitud es "someParam=42".

httpReferrer

string

opcional. La URL de la página desde la cual se envió la solicitud.

This value is derived from the HTTP Referer header. If the request did not include a Referer header then this is undefined.

httpUserAgent

string

opcional. Información característica que identifica la fuente de la solicitud, como el proveedor de software, el sistema operativo o el tipo de aplicación.

Este valor se deriva del encabezado HTTP User-Agent. Si la solicitud no incluía un encabezado User-Agent, entonces esto es undefined.

Ejemplo

El siguiente documento context.request refleja una llamada de función emitida desde https://myapp.example.com/ por un usuario que navega con Chrome 73 en macOS High Sierra:

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

You can access information about the application or system user that called a function with the context.user interface.

context.user

El objeto de usuario del usuario autenticado que llamó a la función.

{
"id": <string>,
"type": <string>,
"data": <document>,
"identities": <array>
}
Campo
Tipo
Descripción

id

string

Una representación en string del ObjectId que identifica de forma única al usuario.

type

string

El tipo de usuario. Son posibles los siguientes tipos:

Tipo
Descripción

"Normal"

The user is an application user logged in through an authentication provider other than the API Key provider.

"servidor"

The user is a server process logged in with any type of App Services API Key.

"sistema"

El usuario es el usuario del sistema que pasa por alto todas las reglas.

data

Documento

Un documento que contiene metadatos que describen al usuario. Este campo combina los datos de todos los identities asociados con el usuario, por lo que los nombres exactos de los campos y los valores dependen de con qué proveedores de autenticación se haya autenticado el usuario.

Nota

Las funciones del sistema no tienen datos de usuario

In system functions, the user.data object is empty. Use context.runningAsSystem() to test if the function is running as a system user.

custom_data

Documento

A document from your application's custom user data collection that specifies the user's ID. You can use the custom user data collection to store arbitrary data about your application's users. If you set the name field, App Services populates the username metadata field with the return value of name. App Services automatically fetches a new copy of the data whenever a user refreshes their access token, such as when they log in. The underlying data is a regular MongoDB document, so you can use standard CRUD operations through the MongoDB Atlas service to define and modify the user's custom data.

Nota

Evite almacenar grandes cantidades de datos de usuarios personalizados

Los datos de usuario personalizados están limitados a 16MB, que es el tamaño máximo de un documento de MongoDB. Para evitar alcanzar este límite, considera almacenar datos de usuario pequeños y relativamente estáticos en cada documento de datos de usuario personalizados, como el lenguaje preferido del usuario o la URL de su imagen de avatar. Para datos que son grandes, ilimitados o que se actualizan con frecuencia, considere almacenar solamente una referencia a los datos en el documento de usuario personalizado o almacenar los datos con una referencia al ID del usuario en lugar de hacerlo en el documento de usuario personalizado.

identities

arreglo

Una lista de identidades de proveedores de autenticación asociadas al usuario. Cuando un usuario inicia sesión por primera vez con un proveedor específico, App Services lo asocia con un objeto de identidad que contiene un identificador único y metadatos adicionales del proveedor sobre el usuario. Para los inicios de sesión posteriores, App Services actualiza los datos de identidad existentes, pero no crea una nueva identidad. Los objetos de identidad tienen el siguiente formato:

{
"id": "<Unique ID>",
"provider_type": "<Provider Name>",
"data": {
"<Metadata Field>": <Value>,
...
}
}
Nombre de campo
Descripción

id

A provider-generated string that uniquely identifies this identity

provider_type

El tipo de proveedor de autenticación asociado a esta identidad.

data

Metadatos adicionales del proveedor de autenticación que describen al usuario. Los nombres y valores exactos de los campos variarán según el proveedor de autenticación con el que haya iniciado sesión el usuario. Para obtener un desglose de los datos de identidad del usuario por proveedor, consulte Metadatos del usuario.

Ejemplo

El siguiente context.user documento refleja un usuario de correo electrónico/contraseña que está asociado con una única clave API de usuario.

exports = function() {
return context.user
}
{
"id": "5cbf68583025b12840664682",
"type": "normal",
"data": {
"email": "someone@example.com",
"name": "myApiKeyName"
},
"identities": [
{
"id": "5cbf68583025b12880667681",
"provider_type": "local-userpass"
},
{
"id": "5cbf6c6a922616045a388c71",
"provider_type": "api-key"
}
]
}
context.runningAsSystem()

Evaluates to a boolean that is true if the function is running as a system user and false otherwise.

exports = function() {
const isSystemUser = context.runningAsSystem()
if(isSystemUser) {
// Do some work that bypasses rules
} else {
// Do some work in the context of the user that called the function.
}
}

Puede acceder a los valores estáticos de su aplicación en una función con la context.values interfaz.

context.values.get(valueName)

Obtiene los datos asociados al nombre del valor proporcionado o undefined si no existe dicho valor. Estos datos pueden ser un valor JSON de texto sin formato o un secreto expuesto mediante un valor.

Parameter
Tipo
Descripción

valueName

string

El nombre del valor.

Ejemplo

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

Puedes enviar HTTPS requests a través de un cliente integrado con la interfaz context.http.

context.http.get()

Envía una solicitud HTTP GET a la URL especificada. Consulte http.get() para obtener información de referencia detallada, incluidas las definiciones de parámetros y los tipos de retorno.

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()

Envía una solicitud HTTP POST a la URL especificada. Consulte http.post() para obtener información de referencia detallada, incluidas las definiciones de parámetros y los tipos de retorno.

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()

Envía una solicitud HTTP PUT a la URL especificada. Consulte http.put() para obtener información de referencia detallada, incluidas las definiciones de parámetros y los tipos de retorno.

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()

Envía una solicitud HTTP PATCH a la URL especificada. Consulte http.patch() para obtener información de referencia detallada, incluidas las definiciones de parámetros y los tipos de retorno.

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.delete()

Envía una solicitud HTTP DELETE a la URL especificada. Ver http.delete() para información de referencia detallada, incluyendo definiciones de parámetros y tipos de retorno.

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

Envía una solicitud HTTP HEAD a la URL especificada. Consulte http.head() para obtener información de referencia detallada, incluidas las definiciones de parámetros y los tipos de retorno.

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

Volver

Referencia de la API de MongoDB