Total.js 5 (backend)
Útvonalak, műveletek, sémák, adatbázisok, WebSocket, nézetek és minden, ami a szerveren fut.
JSON body ellenőrzése egy actionnel
Határozz meg bemeneti sémát egy actionön, és hagyd, hogy a Total.js elutasítsa az érvénytelen kéréseket, mielőtt a kódod lefutna.
Actionök közzététele egyetlen API-végponton
Deklarálj ROUTE('API ...') végpontokat, hogy egy kliens sok actiont hívhasson POST {schema, data}-val egyetlen URL-en.
URL-paraméterek olvasása egy útvonalban
Deklarálj dinamikus szegmenseket, például {id}-t egy útvonalban, és olvasd őket a $.params-ból.
Sok URL elfogása wildcard útvonallal
Zárj egy útvonalat *-gal, hogy illeszkedjen mindenre egy útvonal alatt, és tarts meg konkrét útvonalakat a kivételekhez.
Minden HTTP-metódus kezelése
Deklarálj útvonalakat GET, POST, PUT, PATCH és DELETE metódusokra, és olvasd a metódust a $.method-ból.
Útvonal szűkítése flagekkel
Adj hozzá @flageket, például @json, @xml vagy @upload, hogy egy útvonal csak azokra a kérésekre illeszkedjen, amelyekre szánták.
A query string és a kérés body-jának olvasása
Használd a $.query-t az URL-paraméterekhez és a $.body-t JSON- vagy űrlapadatokhoz egy útvonal-handlerben.
Egy útvonal payload-méretének és timeoutjának korlátozása
Fűzz <1kb-t vagy <10s-t egy útvonalhoz, hogy korlátozd a kérés méretét vagy a handler által elvihető időt.
Típusos útvonalparaméterek deklarálása egy actionben
Használd a NEWACTION params opcióját, hogy a Total.js ellenőrizze az URL-paramétereket, mielőtt a kódod lefutna.
A válasz módjának kiválasztása
Küldj JSON-t, HTML-t, egyszerű szöveget, XML-t, átirányítást, üres választ vagy bináris adatot egy útvonal-handlerből.
Fejlécek olvasása és munka cookie-kkal
Olvasd a kérés fejléceit a $.headers-ból, olvass és írj cookie-kat a $.cookie()-val, és állíts be válaszfejléceket.
Fájlfeltöltések fogadása
Fogadj multipart/form-data-t az @upload flaggel, és olvasd a feltöltött fájlokat a $.files-ból.
Cross-origin kérések engedélyezése CORS-szal
Hívd a CORS()-t, hogy egy origin, több origin vagy bármely origin használhassa az útvonalaidat böngészőből.
Nézet renderelése handler írása nélkül
A handler nélküli útvonal az URL-je után elnevezett nézetet rendereli, vagy azt, amelyet megadsz.
Válassza ki a megfelelő beviteli típusot egy akcióhoz
Válassza ki a bejövő, paraméterek, lekérdezések és kimeneti meghatározások típusát, beleértve az átalakításokat és a elutasított értékeket.
A query string ellenőrzése egy actionben
Deklaráld a query-t a NEWACTION-ben az URL-paraméterek ellenőrzéséhez és átalakításához, és olvasd a tiszta értékeket a $.query-ből.
Egy action válaszának szűrése az output-tal
Deklaráld az output-ot, hogy csak a felsorolt mezők hagyják el az actiont, például hogy sose szivárogjon ki egy jelszó-hash.
Felhasználó vagy jogosultság megkövetelése egy actionben
Használd a NEWACTION user és permissions opcióit, hogy az engedélyezés az action mellett éljen, ne minden útvonalban.
Útvonalak védelme AUTH-tal
Hitelesíts minden kérést az AUTH()-tal, és korlátozd az útvonalakat bejelentkezett vagy névtelen felhasználókra a + és - előtaggal.
Az útvonal deklarálása az actionön belül
Tedd az útvonalat a NEWACTION route opciójába, és tartsd az URL-t, az ellenőrzést és a kódot egy helyen.
Felhasználók bejelentkeztetése a beépített munkamenet-hitelesítéssel
Adj át egy opcióobjektumot az AUTH()-nak, hogy aláírt munkamenet-cookie-kat, munkamenet-tárolót és kijelentkezést kapj az infrastruktúra megírása nélkül.
Action hívása a saját kódból
Használd az ACTION()-t egy action futtatásához időzítőből, feladatból vagy másik actionből, saját payloaddal, query-vel és felhasználóval.
Több action láncolása egy útvonalban
Sorolj fel több actiont a --> után, hogy sorban fussanak ugyanazon a payloadon, és jelöld a (response)-szal, melyik válaszol.
Middleware hozzáadása egy útvonalhoz
Regisztrálj egy middleware-t a MIDDLEWARE()-rel, és csatold útvonalakhoz a #name flaggel.
WebSocket chat építése
Deklarálj egy SOCKET útvonalat, figyeld az üzeneteket, és küldd el őket az összes csatlakozott kliensnek.
Csatlakozás WebSocket szerverhez Node-ból
Használd a WEBSOCKETCLIENT-et WebSocket-kapcsolat nyitásához az appodból, üzenetek küldéséhez és a válaszokra való reagáláshoz.
A kód szétválasztása eseményekkel
Küldj és figyelj alkalmazásszintű eseményeket az EMIT(), ON(), ONCE() és OFF() függvényekkel, hogy a modulok ne hívják közvetlenül egymást.
Adatok tárolása és olvasása a beépített NoSQL adatbázissal
Szúrj be és kérdezz le dokumentumokat a NOSQL()-lel, és tedd elérhetővé actionökön át, adatbázis telepítése nélkül.
A NoSQL adatbázis lekérdezése
Szűrj, rendezz, lapozz és vetíts dokumentumokat a where, in, between, search, sort, take, skip és fields segítségével.
NoSQL dokumentumok frissítése és törlése
Módosíts dokumentumokat az update() és where() segítségével, töröld őket a remove()-val, és olvasd ki, hányat érintett.
Adatbázis váltása a DATA API-val
A DATA a táblát adatbázis/tábla formában címzi, így ugyanaz a lekérdezőkód működik a beépített NoSQL-lel és más adatbázisokkal.
Értékek gyorsítótárazása a memóriában
Tárolj értékeket a CACHE.set()-tel lejárattal, olvasd őket a CACHE.get()-tel, és töröld a remove()-val vagy a reset()-tel.
Kis beállítások tartós tárolása MEMORIZE-dzsel
Tarts a lemezen egy JSON-objektumot, amely túléli az újraindítást, olyan számlálókhoz és beállításokhoz, amelyeknek nem kell adatbázis.
Egyedi azonosítók és hash-ek generálása
Hozz létre azonosítókat az UID()-dal és a GUID()-dal, hash-eket a HASH()-sel, és tudd, melyiket hol használd.
Lassú eredmények lemezre gyorsítótárazása FILECACHE-sel
Használd a FILECACHE()-t, hogy egy eredményt egyszer számolj ki, és egy ideig fájlból használd újra, újraindítás után is.
Feltöltött fájlok tárolása FILESTORAGE-dzsel
Mentsd a feltöltéseket kezelt fájltárolóba a file.fs()-sel, és küldd vissza a $.filefs()-sel.
Nézet renderelése layouttal
Renderelj HTML-nézetet modellel, járd be az adatokat, és adj át értékeket a layoutnak.
Feltételek és escape használata a nézetekben
Ágazz az @{if}, @{else} és @{fi} segítségével, és válassz az escape-elt @{value} kimenet és a nyers HTML @{!value} között.
Tömbök és objektumok bejárása a nézetekben
Ismételj jelölést az @{foreach}-csel tömbökhöz és objektumokhoz, és használd az aktuális elem indexét.
Nézetek és erőforrások beillesztése
Használd újra a jelölést az @{view()}-val, és adj hozzá szkripteket és stílusokat az @{import()}-tal.
A layout szekcióinak kitöltése egy nézetből
Deklarálj egy szekciót egy nézetben az @{section}-nel, írd ki a layoutban az @{section('name')}-mel, és válassz kérésenként másik layoutot.
Nézet-helperek hozzáadása és a config olvasása a nézetekben
Regisztrálj függvényeket a DEF.helpers-ben, hogy hívhasd őket a nézetekből, és olvass config-értékeket az @{'%key'}-vel.
Markdown átalakítása HTML-lé
Használd a String.markdown() prototípust Markdown szöveg HTML-lé rendereléséhez, felhasználók által tárolt vagy fájlokban lévő tartalomhoz.
Szöveg generálása Tangular sablonokkal
Használd a Tangular.render()-t e-mailek, dokumentumok és üzenetek sablonjainak kitöltéséhez feltételekkel, ciklusokkal és helperekkel.
Sablonok renderelése szövegből, fájlokból és URL-ekből a TEMPLATE-tel
A TEMPLATE() segítségével renderelhet egy Tangular sablont, amely lehet szöveg, a sablonmappa egy fájlja vagy egy URL, saját helperekkel és alapértelmezett modellel.
Két lista összehasonlítása a DIFFARR-ral: mit kell hozzáadni, frissíteni és eltávolítani
A DIFFARR() segítségével összehasonlíthatja az adatbázisban mentett elemeket egy űrlap elemeivel, és megkapja a hozzáadandó, frissítendő és eltávolítandó elemeket.
Query Builder: DB() és NEWDB() saját adatbázis-vezérlővel
Építsen kérdőívet a DB().find().where().sort() és hagyja, hogy a regisztrált vezető a NEWDB(), miközben egy regisztrált vezérlő végrehajtása támogatott adatbázis műveletek.
Az app konfigurálása a config fájllal
Tartsd a beállításokat egy config fájlban, és olvasd őket a CONF-on keresztül.
Adatok titkosítása és visszafejtése kulccsal
Alakíts objektumokat átlátszatlan tokenekké az ENCRYPT()-tel, és olvasd vissza a DECRYPT()-tel, aláírt linkekhez és rövid életű tokenekhez.
Külső szolgáltatások hívása az API()-val és a NEWAPI() driverekkel
Regisztráljon drivert egy szolgáltatáshoz a NEWAPI()-val, és hívja meg a műveletekből az API(name, schema, data)-val, a query builderrel azonos callback-, hiba- és promise-stílusban.
Beszélgetés nyelvi modellekkel AIMODEL(), NEWAIMODel() és AIPARSER()
Hozzon létre egy csevegési kérelmet az AIMODEL(), hagyja, hogy a regisztrált vezetője NEWAIMODL(), küldje el azt egy szolgáltató, és olvassa el a streaming válaszokat az AIPARSER().
A sikertelen próbálkozások korlátozása BLOCKED-dal
Számold a próbálkozásokat IP-címenként a BLOCKED()-dal, és válaszolj 429-cel a korlát elérésekor, bejelentkezésekhez és jelszó-visszaállításhoz.
A kis globális segédek: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY és PROMISIFY
Használja az alkalmazás globálok, dátumok, mély másolatok, lekérdezés vonalak és ígéretes segédek.
Hibák gyűjtése ErrorBuilderrel, naplózásuk ERROR()-ral és audit nyom vezetése AUDIT()-tal
Válaszoljon egyszerre több hibával az ErrorBuilderrel, a SUCCESS() válasszal, és ismerje meg, hogyan jegyzi fel az ERROR() a hibákat, és hogyan fűzi hozzá az AUDIT() egy naplófájlhoz, ki mit tett.
Munka késleltetése a setTimeout2() és a clearTimeout2() segítségével
A setTimeout2() segítségével egyszer futtathat egy függvényt, miután a hívások megszűntek; az azonos azonosítójú korábbi időzítőt lecseréli, és a clearTimeout2()-vel megszakíthatja.
Böngészőhöz kötött tokenek az ENCRYPTREQ() és a DECRYPTREQ() segítségével
Titkosítson egy értéket a kérés user agentjével (és opcionálisan IP-címével) együtt, és csak ugyanattól a klienstől olvassa vissza.
Mappa mentése a BACKUP() és a RESTORE() segítségével, parancsok futtatása a SHELL()-lel
Csomagoljon egy könyvtárat egyetlen fájlba, és csomagolja ki újra a BACKUP() és a RESTORE() segítségével, és futtasson shell-parancsot a projekt mappájában a SHELL()-lel.
Az alkalmazás karbantartási módba helyezése a PAUSESERVER()-rel
Állítsa le a szervert név szerint, hogy minden kérés 503-as oldalt kapjon, indítsa újra, és tudja, hogy második argumentum nélkül a hívás átkapcsolja az állapotot.
Üzleti szabályok szövegként a NEWMACRO()-val
Fordítson le egyszerű nyelven írt kis szabályokat (IF, ELSE, AND, OR, RETURN, helper-hívások) egy függvénnyé, amelyet modellel futtat, így a szabályok fájlban vagy adatbázisban élhetnek.
Statikus fájlok kiszolgálása a public mappából
A public könyvtár fájljait automatikusan kiszolgálja, útvonal nélkül.
Másik cím hívása az AJAX()-szal a szerverről
Az AJAX() segítségével HTTP-címet hívhat JSON törzzsel, és megkapja az értelmezett választ, promise-ként vagy callbackkel, és megtudhatja, mi történik hibák és XML esetén.
Más HTTP API-k hívása RESTBuilder-rel
Küldj GET és POST kéréseket egy másik szolgáltatásnak, állíts be fejléceket és timeoutot, és olvasd a státuszt és az értelmezett választ.
Szabadítson fel egy streamet a befejezésekor a CLEANUP()-pal
A CLEANUP() segítségével megsemmisíthet egy streamet, amint befejeződött vagy hibával leállt, hogy ne maradjanak nyitva fájlkezelők, callbackkel vagy promise-ként.
Nézet fordítása több nyelvre
Jelöld a nézetek szövegeit @(...)-lal, és add meg a fordításokat a LOCALIZE() által választott erőforrásfájlokban.
Kód futtatása ütemezés szerint a CRON-nal
Regisztrálj egy függvényt a CRON()-nal és egy ötmezős cron-sorral, és tudd meg, mikor fut az ellenőrzés és hogyan távolítható el egy feladat.
Nehéz munka futtatása szálban vagy gyermekfolyamatban
A NEWTHREAD()-del indíts worker szálat, küldj neki üzeneteket és olvasd a válaszokat anélkül, hogy a fő folyamatot blokkolnád.
Néhány munkaszál megosztása a NEWTHREADPOOL()-lal
Indítson fix számú workert, kérjen kölcsön egyet a pool.exec()-kel, ha van munka, adja vissza a release()-szel, és hagyja, hogy a többi feladat szabad workerre várjon.
Más szerverek hívása REQUEST-tel és fájlok mentése DOWNLOAD-dal
Használd a REQUEST()-et alacsony szintű HTTP-hívásokhoz a metódus, a fejlécek, a query és a törzs teljes kontrolljával, a DOWNLOAD()-ot pedig egy távoli fájl lemezre streamelésére.
E-mail küldése egy view-ból
Állítsd be az SMTP-t a config fájlban, renderelj egy view-t levéltörzsként a MAIL()-lel, és küldj kész HTML-t a HTMLMAIL()-lel.
A 404-es és 401-es oldal testreszabása
Regisztrálj ROUTE('#404') és ROUTE('#401') kezelőket a beépített hibaoldalak cseréjéhez, és hívd meg őket magad a $.fallback()-kel.
Küldjön magának üzenetet a LOGMAIL()-lel
Küldjön egyszerű szöveges vagy JSON üzenetet egy címre nézet nélkül, naplókhoz és riasztásokhoz, ugyanazokkal az SMTP-beállításokkal, mint a MAIL().
Fájlok és streamek küldése a kliensnek
Szolgálj ki egy fájlt a lemezről a $.file()-lal, kényszeríts letöltési nevet, streamelj generált tartalmat a $.stream()-mel, és válaszolj 404-gyel, ha a fájl hiányzik.
Kérések továbbítása másik szerverre
A PROXY()-val rendelj URL-előtagot egy upstream szerverhez, válaszd meg, hogyan másolódik az útvonal, és használd a $.proxy()-t egyetlen útvonal továbbítására.
Helyi szerver közzététele alagúton át a PROXYSERVER() és a PROXYCLIENT() segítségével
Hagyja, hogy egy nyilvános címmel rendelkező Total.js szerver továbbítson kéréseket egy olyan programnak, amely csak egy privát gépen fut, egy WebSocket alagúton át, amelyet a privát oldal nyit meg.
Űrlapok és kérések védelme CSRF-tokenekkel
Hozz létre tokent a $.csrf()-fel, küldd el a kéréssel, és ellenőrizd egy middleware-ben, hogy a más oldalakról érkező kéréseket elutasítsd.
Akciók csoportosítása sémában és input-definíciók újrahasznosítása
A NEWSCHEMA()-val deklarálj összetartozó akciókat egy név alatt, és oszd meg az input-definíciót akciók között egy jsonschemas/ mappabeli fájllal.
Feldolgozási pipeline építése transformokkal
Regisztrálj több lépést egy név alatt a NEWTRANSFORM()-mal, és futtass végig rajtuk egy értéket sorrendben a TRANSFORM()-mal.
Üzenetek cseréje a Total Messaging Service-szel
Kapcsold be a TMS WebSocket végpontot, és engedd, hogy külső kliensek közzétett üzeneteket fogadjanak, üzeneteket küldjenek az alkalmazásodnak és meghívják a függvényeit.
Teljes REST-erőforrás építése akciókkal
Deklaráld a query, read, insert, update, patch és remove akciókat a NoSQL adatbázison, validálással, hiányzó rekordokra adott 404-gyel és az egyes HTTP-metódusokat hozzárendelő útvonalakkal.
WebSocket-útvonal beállítása jelzőkkel, hitelesítéssel és paraméterekkel
Válaszd ki az üzenettípust a @text vagy @binary jelzővel, követelj bejelentkezett felhasználót a + előtaggal, ellenőrizz CSRF-tokent a @csrf-fel, és olvass URL-paramétereket SOCKET-útvonalakban.
CSS, JavaScript és HTML minifikálása és összefűzése
A statikus fájlok és a HTML-válaszok automatikusan minifikálódnak; használd a MERGE()-et több fájl egyként kiszolgálására, a $minify beállításokat pedig a kikapcsolására.
Képek átméretezése és konvertálása
Dolgozz fel képeket az Image.load()-dal, láncolj méret-, vágás- és formátumműveleteket, mentsd az eredményt, mérd meg a méretét, és szolgálj ki bélyegképeket a $.image()-dzsel.
A numerikus rendszer határait ellenőrizze, ahelyett, hogy teljes kötelezettséget vállalna
Ellenőrizze az Int, a SmallInt, a TinyInt és a Number2 indiai kompakt rendszereket, beleértve a frakciós értékeket, a nullát és az out-of-range beviteleit.
A beépített string, number, date és array segédek használata
A Total.js bővíti a String, Number, Date és Array típusokat slugokhoz, hashekhez, formázáshoz, feldolgozáshoz, csoportosításhoz és kereséshez való segédekkel, és objektumokhoz kínálja a U.extend()-et és a U.clone()-t.
Rekord akcióvizsgálati események egy szülői audit sink
Figyeljen a könyvvizsgálati opcióra és kifejezetten hívja meg a $.audit() névjegyzést anélkül, hogy kapcsolatba lépne egy napló szolgáltatással vagy érzékeny bejegyzéseket írna egy alkalmazás naplójára.
Futtatás debug és release módban
A Total.run() opciói választanak a debug és a release mód között; olvasd ki a módot a DEBUG-ból, és korlátozz útvonalakat egy módra a @debug és @release jelzőkkel.
Az alkalmazás tesztelése a beépített tesztfuttatóval
Írj egy test.js-t, amely elindítja az alkalmazást, a Test.push()-sal regisztrál teszteket, a Test.print()-tel ellenőrzi az eredményeket, és nullától eltérő kóddal fejeződik be, ha valamelyik megbukik.
Használja az összes CPU-t a klaszter módban
Indítsa el a több munkavállaló folyamatokat egy port mögött a Total.run( klaszter opciójával, és tudja, mi oszlik meg közöttük, és mi nem.
JavaScript-modul betöltése URL-ről az IMPORT()-tal
Töltsön le egy JavaScript-fájlt egy címről, tartsa a tmp mappában, töltse be require-rel, és használja, amit exportál; a második hívás nem tölti le újra.
Komponensek folyamának építése a Flow.load()-dal és futtatása az exec()-kel
Írjon le egy FlowStreamet komponensekként és a köztük lévő kapcsolatokként, töltse be az alkalmazásba, küldjön rajta át egy üzenetet és olvassa a választ, és módosítsa egy komponens konfigurációját futás közben.
Egy Flow-komponens önálló tesztelése a Flow.test()-tel
Töltsön be egy komponenst egy saját folyamatba, küldjön neki üzenetet a kódból, és olvassa, mit küld a kimeneteire, a teljes folyamat felépítése nélkül.
Folyamatosan futó Python-program hívása a PYPELINE()-nal
Indítson Python-szkriptet az alkalmazásból, küldjön neki JSON-üzeneteket socketen át, és fogadja a válaszait; a szkript újraindul, ha leáll.
Enums és string formátum érvényesítési határértékek
Végezze el a pozitív és negatív kompakt rendszer-ellenőrzéseket enumok, színek, Base64, Zip, ikonok, JSON és IP formátumok számára.
A TotalAPI és a Componentator szolgáltatás határai
Ellenőrizze a TotalAPI ágát és a Componentator helyi pénztárgépet, anélkül, hogy külső szolgáltatási hívásokat teszne.
QueryBuilder műveletek, szűrők és a járművezetői szerződések
Ellenőrizze a nemzeti DB és NEWDB opciókat, az eredményeket, a hibákat és a szűrőformákat anélkül, hogy összekeverné az építőt egy adatbázis-vezérlővel.
Összeállítása és futtatása egy szülő szerver komponens
Összeállítsa a megbízható Total.js HTML-komponenset, hozzon létre egy példát, validálja az üzeneteket, átalakítja és bocsátja ki az erőforrásait.
Controller callbacks, kézi engedélyezés és feltételes válaszok
Végezze el az jsonstring-t, válaszoljon, végezzen, sikeresen engedélyezi, személyre szabott és utoljára módosított kezelést.
Akció szállítási lehetőségek és a kifejezett TMS közzététel
Teszt csrf, titkosítás, tömörítés és közzététel ellen valódi HTTP és TMS ahelyett, hogy feltételezzük, a metadata kényszeríti a viselkedés.
Megsérti a statisztikai cache-t a TOUCH használatával
Szolgáljon és módosítsa az ideiglenes statikus fájlt, törli a cache-t, és távolítsa el a 404 cache bejegyzést.
OPENCLIENT RPC, események és megosztott kapcsolatok
Gyakorlat OPENCLIENT egy helyi protokoll rögzítés, beleértve a kezdeményezés, hívás korreláció, időzítés és logikai ügyfél eltávolítása.
FlowStream fájlok feltöltése és a szigetelt munkavállalók végrehajtása
Végezze el ugyanazt a megbízható FlowStream rendszert, mint egy munkaerő szalag és egy gyermekfolyamat, töltse le a .flow fájlokat, és távolítsa el az esetek.
Akció élettartama, eredmények kiterjesztése és adminisztrátor őrök
gyakoroljon belépést, kimenetet, kiterjesztést, szá és su érvényes, nem érvényes és sikertelen cselekvésekkel.
Valódi SQL a native QueryBuilder és a SQLite tranzakciókkal
Regisztráljon egy korlátozott SQLite-es vezérlőt, futtatja a paraméteres CRUD-t és ellenőrizze a kötelezettséget, korlátozhatja a hibát és visszahívja a fájl-támogatott adatbázist.
Töltse fel az alkalmazási forrásokat, és kerülje a futóidő-csomag meglepetéseit
Végezze el a LOAD-ot külön folyamatban, és ellenőrizze a NPMINSTALL már rendelkezésre álló csomag újrafelhasználását hálózati hozzáférés nélkül.
Keresés egy igazi helyi LDAP-direktor
Kérj egy elszigetelt OpenLDAP példát, és ellenőrizze a kötés eredményét összesen5 0.0.19.
Az alkalmazási fájlok csomagolása Total.js csomagként
Hozzon létre egy helyi csomagot, töltse fel annak definícióit a keret startup töltőn keresztül, és ellenőrizze a kivonatot .src-be.
Saját feltöltött fájl tisztítása és keresési linkek létrehozása
Ellenőrizze az alapértelmezett töltés tisztítását, az automatikus(valódi), a kifejezett világos és a href lekérdezés helyettesítését.