Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Kılavuzlar›Client options and errors

İstemci seçenekleri, hatalar, yeniden denemeler ve zaman aşımları

SDK'nın her hizmetinin paylaştığı davranış ve onu değiştiren seçenekler.

9 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Oluştur

1. İstemciyi oluşturun

src/lib/aurabase.tstypescript
import { createClient } from '@aurabase/aurabase-js'

export const aura = createClient(
  process.env.AURA_URL!,       // https://my-app.aurabase.cloud
  process.env.AURA_ANON_KEY!,  // ortak anahtar
)

createClient(url, key, options?), proje URL'si ve bir anahtarı alır. Proje, URL'nin ana bilgisayarı tarafından tanımlanır, dolayısıyla aktarılacak bir proje kimliği yoktur. Yerel bir yığında, proje alt alan adını içeren http://my-app-ab12.localhost:8080 gibi bir URL kullanın; çıplak bir http://localhost:8080 ile istemci bir uyarı yazdırır çünkü ağ geçidi hangi projeyi kastettiğinizi söyleyemez.

Tarayıcılarda ve uygulamalarda ortak anahtarı (aura_anon_…) kullanın. Bir service_role anahtarı (aura_sk_…) yalnızca sunucunuza aittir ve istemci bunu uygular:

server/admin.tstypescript
import { createAdminClient } from '@aurabase/aurabase-js'

// Yalnızca sunucu: satır düzeyindeki güvenliği atlar.
export const admin = createAdminClient(process.env.AURA_URL!, process.env.AURA_SERVICE_ROLE_KEY!)

Bir tarayıcıda, createClient , bir service_role anahtarı aldığında atar, dolayısıyla sızdırılan bir anahtar kazara gönderilemez. Hatayı uyarıya düşürmek için refuseServiceRoleInBrowser: false değerini ayarlayın; bunu üretimde yapmayın.

Her hizmet istemciyi kapatır: aura.auth, aura.db, aura.storage, aura.realtime, aura.functions, aura.ai, aura.notifications ve aura.from('table') , aura.db.from('table') kısayolu olarak. istemci referansına bakın.

#
Seçenekler

2. Seçenekler

SeçenekVarsayılanEtki
auth.persistSessionBir tarayıcıda trueOturumu sayfa yüklemeleri arasında tut
auth.storagelocalStorage tarayıcıda, bellek başka yerdeOturumun yaşadığı yer: kendi mağazanızı geçin (SSR için çerezler)
auth.autoRefreshtrueErişim belirtecini süresi dolmadan yenileyin ve sekmeleri senkronize tutun
auth.detectSessionInUrlBir tarayıcıda trueOAuth yönlendirmesinden sonra URL'deki oturumu okuyun ve ardından URL'yi temizleyin
fetchglobalThis.fetchTestler veya proxy'ler için kendi fetch'niz
retrytrueGeçici hatalarda okumaları yeniden deneyin. false devre dışı bırakılır veya { enabled, maxRetries }
requestTimeoutMs30000Bir isteğin zaman sınırı. 0 bunu devre dışı bırakır.
onEventhiçbiriGözlemlenebilirlik olaylarını alır, aşağıya bakın
debugfalseAyrıca her olayı console.debug('[aurabase]', event) ile yazdırın
refuseServiceRoleInBrowsertrueBir service_role anahtarı tarayıcıya ulaştığında atın

Sunucu tarafı işleme için Next.js Uygulama Yönlendiricisi ve SSR içinde açıklanan çerez tabanlı istemcileri kullanın.

#
Hatalar

3. Hata nesnesi

Her çağrı { data, error } değerini döndürür ve hiçbir zaman fırlatılmaz. Başarısız olduğunda, error bir AuraError olur:

errors.tstypescript
import { isAuraError } from '@aurabase/aurabase-js'

const { data, error } = await aura.db.from('posts').select('*')
if (error) {
  console.log(error.status)  // Arıza istemcide olduğunda 500 veya 0
  console.log(error.code)    // 'DAHİLİ', 'zaman aşımı', 'ağ hatası',…
  console.log(error.message) // insan tarafından okunabilir
  console.log(error.details) // sunucudaki error.request_id dahil olmak üzere ham gövde
  isAuraError(error)         // doğru
}

Gerçekten başarısız bir çağrı geri döndü:

error.detailsjson
{ "error": { "code": "INTERNAL", "message": "boom", "request_id": "req-123" } }
AlanAnlamı
statusHTTP durumu. 0 hatanın herhangi bir yanıttan önce meydana geldiği anlamına gelir: ağ, zaman aşımı veya istemci tarafından reddedilme.
codeSabit bir tanımlayıcı. Sunucu kodları değerlerini korur; müşteri aşağıdaki kodları ekler.
messageOkunabilir bir açıklama
detailsHam yanıt gövdesi
retryAfter429 üzerinde Retry-After başlığından beklenecek saniyeler
isNotFound, isUnauthorized, isForbidden, isRateLimitedstatus ile ilgili kısayollar

İstemcinin kendisi tarafından üretilen kodlar (durum 0): timeout, network_error, invalid_response (gövdesi JSON olmayan bir başarı), no_session, refresh_discarded, invalid_path, invalid_body. Kimlik doğrulama, invalid_credentials, weak_password, email_already_in_use, user_not_found, invalid_otp, session_expired, session_revoked ve rate_limit_exceeded gibi kodlar ekler. Bir 429 her zaman rate_limit_exceeded taşır.

Değere ihtiyaç duyduğunuzda error yerine data değerini test edin. Bazı çağrılar içerik olmadan başarılı olur (204) ve ardından hem data hem de error null olur.

#
Dayanıklılık

4. Yeniden denemeler ve zaman aşımları

Yeniden denemeler. İstemci, yalnızca aşağıdakilerin tümü geçerli olduğunda bir isteği otomatik olarak yeniden dener:

  • yöntem GET veya HEAD'dir (POST, PUT, PATCH veya DELETE hiçbir zaman yeniden oynatılmaz, dolayısıyla hiçbir şey iki kez çalıştırılmaz);
  • yanıt durumu 408, 429, 502, 503 veya 504 veya ağ başarısız oldu;
  • 3'ten az yeniden deneme gerçekleşti.

Gecikme 0 ile min(500 ms × 2^attempt, 10 s) arasında rastgeledir. Retry-After başlığı, 60 saniyeyle sınırlı olarak onu kazanır. Yeniden denenen istekler X-Retry-Count başlığını taşır. Zaman aşımı yeniden denenmez.

İki kez 503 yanıtını veren ve ardından 200 yanıtını veren bir sunucuya göre ölçülmüştür:

text
GET  /flaky   590 ms  { data: [...] }          events: retry#1:503, retry#2:503
POST /flaky     5 ms  { error: SERVICE_UNAVAILABLE }   (not retried)
GET  /flaky     1 ms  { error: SERVICE_UNAVAILABLE }   with retry: false

Zaman aşımları. requestTimeoutMs (varsayılan olarak 30 saniye) içerisinde yanıt alamayan bir istek status: 0 ve code: 'timeout' ile biter. Gövdeyi okumak aynı sınırla sınırlıdır, dolayısıyla başlıkları gönderen ve ardından duraklayan bir sunucu çağrıyı kapatamaz. Hiçbir zaman yanıt vermeyen bir sunucuya 400 ms sınırıyla yapılan istek, 405 ms sonra hatayı döndürdü.

İki durum, kendi durumlarını yönettikleri için bu sınırı kullanmaz: AbortSignal ilettiğiniz bir çağrı ve yüklemeler. İşlevler kendi timeout seçeneğini kullanır; bkz. Hatalar, zaman aşımları ve yeniden denemeler.

#
gözlemlenebilirlik

5. Müşteriyi gözlemleyin

onEvent müşterinin yaptığı her önemli şey için bir olay alır. Hiçbir zaman bir isteğin başarısız olmasına neden olmaz: Kancanız tarafından oluşturulan bir istisna göz ardı edilir.

kindAlanlarNe zaman
retryattempt, status?, urlYeniden denemeden önce
timeouturlBir istek requestTimeoutMs isabetine ulaştı
refresh-successhiçbiriOturum yenileme başarılı oldu
refresh-discardedreasonBu arada oturum değiştiği için yenileme iptal edildi
jwks-fetch-failedbaseUrlİmzalama anahtarları alınamadı (yerel belirteç kontrolleri)
storage-blockedopTarayıcı depolama erişimini reddetti
observe.tstypescript
const aura = createClient(url, key, {
  onEvent: (e) => metrics.increment(`aurabase.${e.kind}`),
})

Olaylardaki URL'lerin sorgu dizeleri ve parçaları kaldırılmıştır çünkü bunlar sırlar (?apikey=, imzalı bağlantılar) taşıyabilmektedir.

#
Oturumlar

6. Oturumlar ve belirteçler

  • İstemci her istekte apikey ve kullanıcı oturum açtığında Authorization: Bearer <access token> gönderir.
  • 30 saniyeden az kaldığında erişim belirtecini yeniler. Eşzamanlı yenilemeler tek bir yenilemede birleştirilir, böylece dönüşümlü yenileme jetonu bir kez kullanılır.
  • Bir 401 isteğin bir yenilemesini ve bir tekrarını tetikler, ardından durur.
  • Bir tarayıcıda yenilemeler sekmeler arasında koordine edilir.
  • aura.auth.onAuthStateChange(callback) size SIGNED_IN, SIGNED_OUT, TOKEN_REFRESHED, USER_UPDATED ve MFA_CHALLENGE hakkında bilgi verir. kimlik doğrulama kılavuzuna bakın.