Overview
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 |
Obtener los metadatos de la aplicación (context.app)
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.idEl ID interno único de la aplicación que contiene la función.
Ejemplo
"60c8e59866b0c33d14ee634a"
context.app.clientAppIdEl ID único de la aplicación de cliente para la aplicación que contiene la función.
Ejemplo
"myapp-abcde"
context.app.projectIdEl ID del Proyecto Atlas que contiene la aplicación.
Ejemplo
"5e1ec444970199272441a214"
context.app.deploymentUn 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.lastDeployedLa 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.hostingUriSi 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"
Llamar a una función (context.functions)
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) ParameterTipoDescripciónfunctionNamestring
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); };
Verifica el entorno de la aplicación (context.environment)
You can access information about your App's current environment configuration and access environment-specific values through the context.environment interface.
context.environment.tagEl 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" } } };
context.environment.values
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 };
Conectarse a una fuente de datos de MongoDB o a un servicio de terceros (context.services)
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
undefinedsi no existe tal servicio.context.services.get(serviceName) ParameterTipoDescripciónserviceNamestring
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-atlasinstancia federada de base de datos:
mongodb-datafederation
Ejemplo
Leer y guardar datos en MongoDB Atlasexports = 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 tercerosexports = 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) } };
Obtener metadatos de la solicitudcontext.request ()
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.requestAn 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> } CampoTipoDescripciónremoteIPAddressstring
La dirección IP del cliente que emitió la solicitud de la Función.
requestHeadersObjeto
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" ] } } webhookUrlstring
Opcional. En las funciones de punto final HTTPS, la ruta del punto final.
httpMethodstring
Opcional. En las funciones de punto final HTTPS, el método HTTP de la solicitud que llamó al punto final.
rawQueryStringstring
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 elrawQueryStringpara esa solicitud es"someParam=42".httpReferrerstring
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
Refererheader then this isundefined.httpUserAgentstring
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 esundefined.Ejemplo
El siguiente documento
context.requestrefleja una llamada de función emitida desdehttps://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" ] } }
Obtener datos de usuariocontext.user ()
You can access information about the application or system user that called a function with the context.user interface.
context.userEl objeto de usuario del usuario autenticado que llamó a la función.
{ "id": <string>, "type": <string>, "data": <document>, "identities": <array> } CampoTipoDescripciónidstring
Una representación en string del ObjectId que identifica de forma única al usuario.
typestring
El tipo de usuario. Son posibles los siguientes tipos:
TipoDescripció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.
dataDocumento
Un documento que contiene metadatos que describen al usuario. Este campo combina los datos de todos los
identitiesasociados 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.dataobject is empty. Usecontext.runningAsSystem()to test if the function is running as a system user.custom_dataDocumento
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
namefield, App Services populates theusernamemetadata field with the return value ofname. 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.identitiesarreglo
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 campoDescripciónidA provider-generated string that uniquely identifies this identity
provider_typeEl tipo de proveedor de autenticación asociado a esta identidad.
dataMetadatos 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.userdocumento 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
trueif the function is running as a system user andfalseotherwise.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. } }
Haz referencia a un valor (context.values)
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
undefinedsi no existe dicho valor. Estos datos pueden ser un valor JSON de texto sin formato o un secreto expuesto mediante un valor.ParameterTipoDescripciónvalueNamestring
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" };
Enviar una solicitud HTTP (context.http)
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()); };