Context
이 페이지의 내용
개요
Atlas Function은 들어오는 요청에 대한 메타데이터를 포함하고 앱 서비스 앱에서 구성한 구성 요소 및 서비스에 대한 액세스를 제공하는 글로벌 context
객체에 액세스할 수 있습니다.
context
객체는 다음과 같은 인터페이스를 노출합니다.
앱 메타데이터 가져오기(context.app
)
context.app
객체에 함수가 포함된 앱에 대한 메타데이터가 포함되어 있습니다.
{ "id": string, "clientAppId": string, "name": string, "projectId": string, "deployment": { "model": string, "providerRegion": string, }, "lastDeployed": string, "hostingUri": string, }
context.app.deployment
앱의 배포 모델과 리전을 설명하는 객체입니다.
예시
{ "model": "LOCAL", "providerRegion": "aws-us-east-1" }
함수 호출(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.tag
앱의 현재 환경 이름(문자열)입니다.
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
문자열
연결된 클러스터, 연합 데이터베이스 인스턴스, 또는 서비스의 이름입니다.
팁
MongoDB 서비스 이름
앱에서 생성한 연결된 데이터 소스는 다음 기본 이름 중 하나를 사용합니다.
클러스터:
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 }, }) }; [사용 중단됨] 타사 서비스 조치 호출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) } };
요청 메타데이터context.request
가져오기()
컨텍스트를 사용하여 수신 요청 에 대한 정보 액세스 할 수 있습니다.요청 인터페이스.
팁
context.request
인터페이스에 요청 본문 페이로드가 포함되어 있지 않습니다. HTTPS endpoint 함수에서는 제공된 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 Header 유형에 매핑되는 객체 입니다. 즉, 함수를 실행하게 한 요청 에 포함된 것입니다. 각 필드 의 값은 각 string 이 요청 에 포함된 지정된 유형의 헤더에 매핑되는 문자열 배열 입니다.
예시
{ "requestHeaders": { "Content-Type": ["application/json"], "Cookie": [ "someCookie=someValue", "anotherCookie=anotherValue" ] } } webhookUrl
문자열
선택 사항. HTTPS 엔드포인트 함수에서는 엔드포인트의 라우트입니다.
httpMethod
문자열
선택 사항. HTTPS endpoint 함수에서 HTTP 메서드 는 엔드포인트를 호출한 요청 의 입니다.
rawQueryString
문자열
들어오는 HTTP 요청에 연결된 쿼리 문자열입니다. 모든 쿼리 매개변수는 지정된 순서 그대로 표시됩니다.
중요
App Services에서 비밀 매개변수 제거
보안상의 이유로 Atlas App Services는 키가
secret
인 쿼리 문자열 키/값 쌍을 자동으로 제거합니다. 예를 들어 수신 요청에 쿼리 문자열?secret=hello&someParam=42
가 있는 경우 해당 요청의rawQueryString
은"someParam=42"
입니다.httpReferrer
문자열
선택 사항. 요청이 전송된 페이지의 URL입니다.
이 값은 HTTP Referer 헤더 에서 파생됩니다. . 요청에
Referer
헤더가 포함되지 않은 경우 이는undefined
입니다.httpUserAgent
문자열
선택 사항. 요청의 소스를 식별하는 특성 정보(예: 소프트웨어 공급업체, 운영 체제, 애플리케이션 유형)입니다.
이 값은 HTTP 사용자-에이전트 헤더 에서 파생됩니다. . 요청에
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
)
context.user
인터페이스를 사용하여 함수를 호출한 애플리케이션 또는 시스템 사용자에 대한 정보에 액세스할 수 있습니다.
context.user
함수를 호출한 인증된 사용자의 사용자 객체입니다.
{ "id": <string>, "type": <string>, "data": <document>, "identities": <array> } 필드유형설명id
문자열
사용자를 고유하게 식별하는 ObjectId의 문자열 표현입니다.
type
문자열
사용자 유형입니다. 다음 유형이 가능합니다.
유형설명'정상'
'서버'
사용자는 모든 유형의 App Services API 키로 로그인된 서버 프로세스입니다.
'시스템'
사용자는 모든 규칙을 우회하는 시스템 사용자 입니다.
data
문서
사용자를 설명하는 메타데이터가 포함된 문서입니다. 이 필드는 사용자와 연결된 모든
identities
의 데이터를 결합하므로 정확한 필드 이름과 값은 사용자가 인증한 인증 공급자에 따라 달라집니다.참고
시스템 기능에 사용자 데이터가 없음
시스템 기능에서
user.data
객체가 비어 있습니다.context.runningAsSystem()
을(를) 사용하여 함수가 시스템 사용자로 실행되고 있는지 테스트합니다.custom_data
문서
사용자 ID를 지정하는 애플리케이션의 사용자 지정 사용자 데이터 컬렉션의 문서입니다. 사용자 지정 사용자 데이터 컬렉션을 사용하여 애플리케이션 사용자에 대한 임의의 데이터를 저장할 수 있습니다.
name
필드를 설정하면 App Services는username
메타데이터 필드를name
반환 값으로 채웁니다. App Services는 사용자가 로그인할 때와 같이 액세스 토큰을 새로 고칠 때마다 자동으로 데이터의 새 복사본을 가져옵니다. 기본 데이터는 일반 MongoDB 문서이므로 MongoDB Atlas 서비스를 통해 표준 CRUD 작업을 사용하여 사용자의 사용자 지정 데이터를 정의하고 수정할 수 있습니다.참고
대규모 사용자 지정 사용자 데이터 저장 방지
사용자 지정 사용자 데이터는 MongoDB 문서의 최대 크기인
16MB
(으)로 제한됩니다. 이 제한에 도달하지 않으려면 사용자가 선호하는 언어나 아바타 이미지의 URL과 같은 작고 상대적으로 정적인 사용자 데이터를 각 사용자 지정 사용자 데이터 문서에 저장하는 것이 좋습니다. 용량이 크거나, 제한이 없거나, 자주 업데이트되는 데이터의 경우 사용자 지정 사용자 문서에 데이터에 대한 참조만 저장하거나 사용자 지정 사용자 문서가 아닌 사용자의 ID에 대한 참조와 함께 데이터를 저장하는 것을 고려합니다.identities
배열
사용자와 연결된 인증 공급자 ID 목록입니다. 사용자가 특정 공급자에 처음 로그인하면 앱 서비스는 사용자를 고유 식별자 및 공급자의 사용자에 대한 추가 메타데이터가 포함된 ID 객체와 연결합니다. 후속 로그인의 경우 App Services는 기존 ID 데이터를 새로 고치지만 새 ID를 만들지 않습니다. ID 객체의 형태는 다음과 같습니다.
{ "id": "<Unique ID>", "provider_type": "<Provider Name>", "data": { "<Metadata Field>": <Value>, ... } } 필드 이름설명id
이 ID를 고유하게 식별하는 공급자 생성 문자열입니다.
provider_type
이 ID와 연결된 인증 공급자의 유형입니다.
data
사용자를 설명하는 인증 공급자의 추가 메타데이터입니다. 정확한 필드 이름과 값은 사용자가 로그인한 인증 공급자에 따라 달라집니다. 사용자 ID 데이터의 공급자별 분석은 사용자 메타데이터를 참조하세요.
예시
다음
context.user
문서는 단일 사용자 API 키 와 연결된 이메일/비밀번호 사용자를 반영합니다.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()
함수가 시스템 사용자로 실행 중이면
true
, 그렇지 않으면false
인 부울로 평가합니다.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. } }
값 참조(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 requests를 보낼 수 있습니다.
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.delete()
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()); };