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 integrado. | |
Describe la solicitud entrante que desencadenó una llamada de función. | |
Expone objetos de cliente que pueden acceder a fuentes de datos y servicios. | |
Describe el usuario autenticado que inició la solicitud. | |
Contiene valores globales estáticos. |
Obtener metadatos de la aplicacióncontext.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 se implementó por última vez la aplicación Atlas, formateada como una cadena 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()Llama a una función específica y devuelve el resultado.
context.functions.execute(functionName, ...args) ParameterTipoDescripciónfunctionNamestring
El nombre de la función.
args...mixto
Una lista variádica de argumentos para pasar a la función. Cada parámetro de la función corresponde a un argumento independiente, separado por comas.
Ejemplo
// difference: subtracts b from a using the sum function exports = function(a, b) { return context.functions.execute("sum", a, -1 * b); };
Comprobar el entorno de la aplicacióncontext.environment ()
Puede acceder a información sobre la configuración del entorno actual de su aplicación y acceder a valores específicos del entorno a través de la context.environment interfaz.
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" } } };
contexto.entorno.valores
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 dicho servicio.context.services.get(serviceName) ParameterTipoDescripciónserviceNamestring
El nombre del clúster vinculado, la instancia de base de datos federada o el servicio.
Tip
Nombres de servicios de MongoDB
Las fuentes de datos vinculadas creadas por su aplicación utilizan uno de los siguientes nombres predeterminados:
Clúster:
mongodb-atlasInstancia de base de datos federada:
mongodb-datafederation
Ejemplo
Leer y escribir 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.requestUn objeto que contiene información sobre la solicitud HTTP que provocó la ejecución de la función.
{ "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 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
La cadena de consulta adjunta a la solicitud HTTP entrante. Todos los parámetros de consulta aparecen en el mismo orden en que se especificaron.
Importante
App Services elimina el parámetro secreto
Por razones de seguridad, Atlas App Services elimina automáticamente cualquier par clave-valor de cadena de consulta cuya clave sea
secret. Por ejemplo, si una solicitud entrante tiene la cadena de consulta?secret=hello&someParam=42, elrawQueryStringpara esa solicitud es"someParam=42".httpReferrerstring
Opcional. La URL de la página desde la que se envió la solicitud.
Este valor se deriva del encabezado HTTP Referer. Si la solicitud no incluyó un
Refererencabezado, esteundefinedserá.httpUserAgentstring
Opcional. Información característica que identifica el origen 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
User-Agentencabezado, esteundefinedes.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 ()
Puede acceder a información sobre la aplicación o el usuario del sistema que llamó a una función con la interfaz context.user.
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"
El usuario es un usuario de la aplicación que inició sesión a través de un proveedor de autenticación distinto del proveedor de la clave API.
"servidor"
El usuario es un proceso de servidor que inicia sesión con cualquier tipo de clave API de App Services.
"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 al usuario, por lo que los nombres y valores exactos de los campos dependen de los proveedores de autenticación con los que se haya autenticado el usuario.Nota
Las funciones del sistema no tienen datos de usuario
En las funciones del sistema, el
user.dataobjeto está vacío. Usecontext.runningAsSystem()para comprobar si la función se ejecuta como usuario del sistema.custom_dataDocumento
Un documento de la colección de datos de usuario personalizada de su aplicación que especifica el ID del usuario. Puede usar la colección de datos de usuario personalizada para almacenar datos arbitrarios sobre los usuarios de su aplicación. Si
nameconfigura el campo, App Services rellena el campo deusernamemetadatos con el valor denameretorno. App Services obtiene automáticamente una nueva copia de los datos cada vez que un usuario actualiza su token de acceso, como al iniciar sesión. Los datos subyacentes son un documento MongoDB normal, por lo que puede usar operaciones CRUD estándar a través del servicio MongoDB Atlas para definir y modificar los datos personalizados del usuario.Nota
Evite almacenar grandes cantidades de datos de usuarios personalizados
Los datos de usuario personalizados están limitados a
16MB, el tamaño máximo de un documento de MongoDB. Para evitar alcanzar este límite, considere almacenar datos de usuario pequeños y relativamente estáticos en cada documento de datos de usuario personalizados, como el idioma preferido del usuario o la URL de su imagen de avatar. Para datos grandes, ilimitados o que se actualizan con frecuencia, considere almacenar solo 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 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ónidUna cadena generada por el proveedor que identifica de forma única esta identidad
provider_typeEl tipo de proveedor de autenticación asociado con 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()Se evalúa como un valor booleano que es
truesi la función se ejecuta como un usuario del sistema yfalseen caso contrario.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. } }
Hacer referencia a un valorcontext.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 HTTPcontext.http ()
Puede enviar solicitudes HTTPS 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. Consulte
http.delete()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.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()); };