JavaScript ile Atlas Functions Yazma
Öğrenenler, bağlantılı hizmetlere, ortam değişkenlerine ve yerleşik MongoDB istemcisine erişmek için context nesnesini kullanarak Atlas Functions yazacaklardır.
JavaScript ile Atlas Functions Yazma, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.
Atlas Functions Nedir?
Atlas Functions, Atlas App Services'in yönetilen çalışma ortamında çalışan sunucu tarafı JavaScript işlevleridir. Veritabanı tetikleyicilerinin, zamanlanmış tetikleyicilerin ve HTTPS uç noktalarının temelindeki yürütme birimidir. İşlevler MongoDB istemcisine, ortam değişkenlerine, bağlı üçüncü taraf hizmetlerine (HTTP, AWS, Twilio vb.) tam erişime sahiptir ve diğer Atlas Functions'ı çağırabilir.
İşlevin Yapısı: exports ve context
Her Atlas Function, giriş noktası olarak tek bir eşzamansız işlevi exports = async function(...args) {} aracılığıyla dışa aktarır. İşlevin içinde, genel context nesnesi Atlas hizmetlerine erişim sağlar. İşlev, çağrılma türüne göre değişen bağımsız değişkenler alır: veritabanı tetikleyicileri bir değişiklik olayı, HTTPS uç noktaları bir HTTP isteği, çağrılan işlevler ise çağıran tarafından geçirilen bağımsız değişkenleri alır.
// Minimal Atlas Function structure
exports = async function(arg1, arg2) {
// context is globally available
const db = context.services.get('mongodb-atlas').db('mydb')
const result = await db.collection('users').findOne({ _id: arg1 })
return result
}context.services ile MongoDB'ye Erişme
context.services.get('mongodb-atlas'), bağlı Atlas kümenize bağlanmış bir MongoDB istemcisi döndürür. Bu istemciden önce bir veritabanı tanıtıcısı, ardından bir koleksiyon tanıtıcısı alırsınız — Node.js MongoDB sürücüsündekiyle aynı API. İşlemler eşzamansızdır ve beklenmelidir. İstemci, App Services'ın dahili kimlik bilgileriyle önceden yapılandırılmıştır; bu nedenle işlev kodunda bağlantı dizelerini yönetmeniz gerekmez.
exports = async function() {
// Get the linked MongoDB service
const mongodb = context.services.get('mongodb-atlas')
const db = mongodb.db('mydb')
const orders = db.collection('orders')
// Full CRUD API available
const pending = await orders.find({ status: 'pending' }).toArray()
await orders.updateMany({ status: 'pending' }, { $set: { notified: true } })
return { processed: pending.length }
}Ortam Değişkenleri: context.values ve context.environment
Gizli bilgileri (API anahtarları, parolalar) işlev koduna sabitlemek tehlikelidir. Atlas Functions güvenli yapılandırma için iki mekanizma destekler: Değerler — App Services'te saklanan ve context.values.get('myValue') aracılığıyla erişilen statik dizeler veya gizli bilgiler. Ortam değişkenleri — context.environment.values.MY_VAR aracılığıyla erişilen, ortama özel geçersiz kılmalar. API anahtarlarını, web kancası gizli anahtarlarını ve ortama özgü ayarları saklamak için bunları kullanın.
exports = async function() {
// Retrieve a stored secret (never exposed in function logs)
const apiKey = context.values.get('STRIPE_SECRET_KEY')
// Or use environment-specific values
const webhookUrl = context.environment.values.SLACK_WEBHOOK_URL
// Use in an HTTP call
const http = context.services.get('myHTTP')
await http.post({
url: webhookUrl,
headers: { 'Content-Type': ['application/json'] },
body: JSON.stringify({ text: 'Job complete' })
})
}HTTP İstekleri Gönderme
Atlas Functions, bağlı bir HTTP hizmeti veya yerleşik context.http kısayolunu kullanarak harici REST API'lerini çağırabilir. Bu sayede ek altyapı dağıtmadan Stripe, SendGrid, Slack, Twilio, GitHub ve diğer REST API'leriyle tümleştirme yapabilirsiniz. API anahtarlarını her zaman Değerler veya Gizli Bilgiler'de saklayın; kodun içine yazmayın.
exports = async function(orderId, amount) {
// Create a Stripe payment intent via REST API
const stripeKey = context.values.get('STRIPE_SECRET_KEY')
const response = await context.http.post({
url: 'https://api.stripe.com/v1/payment_intents',
headers: {
'Authorization': ['Bearer ' + stripeKey],
'Content-Type': ['application/x-www-form-urlencoded']
},
body: 'amount=' + Math.round(amount * 100) + '¤cy=usd&metadata[orderId]=' + orderId
})
const body = EJSON.parse(response.body.text())
return body.client_secret
}Diğer Atlas Functions'ı Çağırma
Atlas Functions birbirini context.functions.execute('functionName', arg1, arg2) ile çağırabilir. Bu, yeniden kullanımı teşvik eder — bir yardımcı işlevi (e-posta gönderme, olay günlüğü oluşturma veya JWT doğrulama gibi) bir kez yazıp herhangi bir tetikleyici ya da uç nokta işlevinden çağırabilirsiniz. Özyinelemeli çağrılar desteklenir, ancak Atlas sonsuz özyinelemeyi önlemek için çağrı derinliğini sınırlar.
// Main function calls a utility function
exports = async function(userId) {
const db = context.services.get('mongodb-atlas').db('mydb')
const user = await db.collection('users').findOne({ _id: userId })
// Call a reusable 'sendWelcomeEmail' function
await context.functions.execute('sendWelcomeEmail', user.email, user.name)
return { status: 'welcome email sent' }
}Kullanıcı Bağlamı: Kim Çağırıyor?
Kimliği doğrulanmış kullanıcılar tarafından çağrılan işlevlerde (kullanıcı kimlik doğrulamalı HTTPS uç noktaları aracılığıyla), context.user çağıranın kimliğini sağlar: kullanıcı kimliği, e-posta adresi, roller ve özel veriler. Bu, kullanıcı kimliklerini elle geçirmeden güvenli ve kullanıcı kapsamlı bir mantık oluşturmanızı sağlar. Tetikleyiciler veya zamanlanmış işler tarafından çağrılan işlevlerde sistem düzeyinde kullanıcı bağlamı bulunur.
// HTTPS endpoint function that is user-scoped
exports = async function({ query, body }) {
// context.user is populated when the endpoint uses user auth
const currentUserId = context.user.id
const db = context.services.get('mongodb-atlas').db('mydb')
// Users can only read their own data
const orders = await db.collection('orders')
.find({ ownerId: currentUserId })
.toArray()
return { orders }
}Hata İşleme için En İyi Uygulamalar
İşlev gövdenizi try/catch içine alın ve hataları günlüğe kaydettikten sonra her zaman yeniden fırlatın. Bu, Atlas'ın çağrıyı başarısız olarak işaretlemesini (tetikleyiciler için yeniden deneme mantığını etkinleştirir) ve hatanın tüm bağlamıyla birlikte yürütme günlüğünde görünmesini sağlar. Günlüklerin makineler tarafından ayrıştırılabilmesi için düz metin yerine yapılandırılmış günlük kaydını (JSON dizeleri) kullanın.
exports = async function(payload) {
const start = Date.now()
try {
const result = await processPayload(payload)
console.log(JSON.stringify({ status: 'ok', result, ms: Date.now() - start }))
return result
} catch (err) {
console.error(JSON.stringify({
status: 'error',
message: err.message,
stack: err.stack,
ms: Date.now() - start
}))
throw err // re-throw so Atlas marks this invocation as FAILED
}
}İşlev Yürütme Sınırları
Atlas Functions'ın önemli yürütme sınırları vardır: En uzun çalışma süresi: çağrı başına 90 saniye. Bellek: 256 MB. Kod boyutu: işlev başına 64 KB. Yanıt boyutu: HTTPS uç noktaları için 4 MB. Uzun süren veya yoğun bellek kullanan işlemler için işlevlerinizi verileri küçük gruplar hâlinde işleyecek ve büyük veri kümelerini birden çok çağrıyla (zamanlanmış tetikleyiciler aracılığıyla) ele alacak şekilde tasarlayın.
app-services-cli ile İşlevleri Yerel Olarak Sınama
Atlas Functions'ı Atlas App Services CLI (app-services-cli) kullanarak yerel olarak geliştirebilir ve sınayabilirsiniz. İşlev kodunuzu, tetikleyici yapılandırmalarınızı ve ortam değerlerinizi tek bir komutla App Services'a gönderin. CLI ayrıca mevcut yapılandırmanızı kod olarak çekmeyi de destekler; böylece uygulama kodunuzla birlikte Git'te sürüm denetimine alabilirsiniz.
// Install the App Services CLI
// npm install -g atlas-app-services-cli
// Pull existing config
// appservices pull --remote=<app_id>
// Push updated functions
// appservices push --include-node-modules
// Run a function locally (using App Services CLI)
// appservices function run --name=myFunction --arg='{"key":"val"}'İşlevleri Adlandırma ve Düzenleme
App Services uygulamanız büyüdükçe işlevleri tutarlı adlandırma kurallarıyla düzenleyin. Ön ekler veya klasörler kullanın: trigger_onOrderInsert, util_sendEmail, api_getProducts. İşlevleri küçük ve tek bir amaca odaklanmış tutun — tek bir iş yapan bir işlevi sınamak, hatalarını ayıklamak ve yeniden kullanmak daha kolaydır. Ortak mantığı yardımcı işlevlere ayırın ve bunları birden çok çağırandan context.functions.execute() ile çağırın.
// Organised function naming examples:
// trigger_onOrderInsert — database trigger handler
// trigger_dailyArchive — scheduled trigger
// api_getOrders — HTTPS endpoint handler
// util_sendEmail — shared email utility
// util_validatePayload — shared validation utility
// Calling a utility from any other function:
await context.functions.execute('util_sendEmail', {
to: user.email,
subject: 'Your order is confirmed',
body: 'Order ID: ' + orderId
})Hızlı Kontrol
Bu derste MongoDB ve NoSQL Veritabanları kavramlarını ne kadar anladığınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: Atlas Functions tek bir eşzamansız işlev giriş noktası dışa aktarır ve genel context nesnesi aracılığıyla MongoDB'ye, HTTP hizmetlerine ve ortam yapılandırmasına erişir; işlevler yeniden kullanılabilir yardımcı mantık için birbirini context.functions.execute() ile çağırabilir ve Atlas'ın çağrıları başarısız olarak işaretleyip tetikleyicileri uygun şekilde yeniden denemesi için hataları günlüğe kaydettikten sonra her zaman yeniden fırlatmalısınız. Sırada Atlas Functions'ı HTTPS uç noktaları olarak kullanıma sunacağız.
Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“JavaScript ile Atlas Functions Yazma” dersi ücretsiz mi?
Evet — “JavaScript ile Atlas Functions Yazma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.
“JavaScript ile Atlas Functions Yazma” dersinde ne öğreneceğim?
Öğrenenler, bağlantılı hizmetlere, ortam değişkenlerine ve yerleşik MongoDB istemcisine erişmek için context nesnesini kullanarak Atlas Functions yazacaklardır. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“JavaScript ile Atlas Functions Yazma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Veritabanı Tetikleyicileri: CRUD Olaylarına Tepki Verme
- Zamanlanmış Tetikleyiciler ve Cron İşleri
- JavaScript ile Atlas Functions Yazma
- Hafif Web Kancaları Olarak HTTPS Uç Noktaları