NX.Storage()
— App.js & route
Pola pemakaian Storage di template route, hubungannya
dengan endpoint di App.js, serta worker, cache,
dan buckets (federated)
Diagram alur kerja NX.Storage
Muat skrip & inisialisasi global
nxdom.js mengimpor Storage dari
NexaStorage.js, menempelkannya ke window.NX.Storage,
lalu App.js membuat NX.Page sehingga
NEXA.apiBase dan endpoint terisi.
Satu pemanggilan NX.Storage() di route
Dari templates/*.js, satu panggilan NX.Storage()
membaca NEXA.apiBase, userid, lalu memakai worker/cache (jika
aktif di App.js) untuk api / package /
models / buckets, dll.
Berkas utama (referensi cepat)
| Berkas | Peran untuk Storage |
|---|---|
index.html |
Memuat nxdom.js lalu App.js; kontainer #main. |
assets/modules/nxdom.js |
Menempelkan Storage ke NX. |
App.js |
NX.Page({ endpoint, webWorker, … }). |
assets/modules/Buckets/NexaStorage.js |
Implementasi Storage(). |
assets/modules/Buckets/NexaFederated.js |
Dipakai buckets() untuk federasi penyimpanan. |
Hubungan dengan endpoint (App.js)
endpoint: {
url: "http://localhost:8001",
urlApi: "http://localhost:3000",
typicode: "https://jsonplaceholder.typicode.com/posts",
},
Setelah NX.Page: NEXA.url,
NEXA.apiBase, NEXA.typicode, snapshot
NEXA.endpoint, dan NEXA.firebaseConfig (jika ada)
dipakai Storage dan buckets. typicode adalah URL absolut untuk
Storage().get(NEXA.typicode).
1. Storage().api(row, body) — POST ke API base
const res = await NX.Storage().api("test", { title: "Halo", slug: "halo" });POST ke {NEXA.apiBase}/test; body + userid otomatis bila sesi mengizinkan.
2. Storage().get(NEXA.typicode) — GET ke URL dari endpoint
const res2 = await NX.Storage().get(NEXA.typicode);GET ke URL penuh (bukan path relatif ke NEXA.apiBase).
3. Storage().package().method() — chain paket ke controller PHP
const Storage = await NX.Storage().example().news({ news: 1 });Nama paket memetakan ke controller PHP; method dipanggil di server dengan payload terenkripsi.
4. Storage().models("ClassPhp", { method, params }) — model PHP langsung
const data1 = await NX.Storage().models("News", {
method: "data",
params: ["demo"],
});params harus array yang urutannya cocok dengan parameter method di PHP.
5. Storage().models("User").byAvatar(1) — chaining ke model PHP
const data2 = await NX.Storage().models("User").byAvatar(1);
6. Storage().model("news").select("*").get() — query builder tabel SQL
const complexQuery = await NX.Storage()
.model("news")
.select("*")
.get();
model (tunggal) = nama tabel SQL, bukan class PHP.
Berbeda dari models("News", …) yang memanggil class model PHP.
7. Storage().buckets(config) — Federated (database / IndexedDB / Firebase)
Membungkus NexaFederated lewat Storage(). Implementasi: NexaFederated.js.
Argumen config
Field utama: id (metadata nexaStore),
settings.storage (database | indexedDB |
firebase), key untuk indexedDB/Firebase, dan bentuk
query untuk mode database. Singkatan: buckets("demo") sama dengan
buckets({ id: "demo" }).
Objek yang dikembalikan
Method: get, set, del, upt,
getRealtime, analysis, federated — lihat
tabel lengkap di Storage.md.
Mode penyimpanan
- database — via
models("Office").executeOperation+ worker/cache seperti Storage lain. - indexedDB — data di
bucketsStore(DB NX). - firebase — perlu
endpoint.firebaseConfigdi App.js.
Konfigurasi Firebase (firebaseConfig)
Objek Firebase Web (apiKey, authDomain, databaseURL, projectId, …) di dalam
endpoint; disalin ke NEXA.firebaseConfig oleh
syncNexaEndpoints. Tanpa ini, operasi bucket Firebase mengembalikan
skipped: true.
Contoh ringkas
const h = NX.Storage().buckets({
id: "demo",
settings: { storage: "indexedDB" },
key: 261760199266386,
});
await h.set({ name: "dantrik" });
const local = await h.get({ limit: 50 });Realtime Firebase (getRealtime)
Untuk storage: "firebase", getRealtime(data, callback)
memakai watch RTDB; mengembalikan fungsi stop() untuk unsubscribe.
Mode lain memakai polling ~5 detik. Detail payload callback ada di Storage.md.
Metadata nexaStore vs fallback
Jika NX.ref.get("nexaStore", id) ada data, dipakai sebagai
konfigurasi; jika null, NexaFederated memakai config
yang Anda kirim ke buckets(...).
Web Worker & cache respons (App.js)
webWorker: {
enabled: true,
storage: true,
indexedDB: true,
storageCacheTtlMs: 86400000,
debug: false,
},
Memengaruhi fetch/cache Storage (termasuk cabang database di buckets). Ini
terpisah dari lapisan metadata nexaStore / bucketsStore.
Request Firebase tidak dipindahkan ke Web Worker.
Ringkasan alur data
App.js endpoint
→ NEXA.url, NEXA.apiBase, NEXA.typicode, …
↓
Route template
→ NX.Storage().api / .get / .package / .models / .model / .buckets
↓
NexaStorage.js (+ NexaModels, NexaFederated)
Untuk routing SPA dan endpoint lengkap, lihat panduan NXDOM;
untuk IndexedDB (NX.ref).