Total.js 5 (backend)
Trasy, akce, schémata, databáze, WebSocket, pohledy a vše, co běží na serveru.
Validace JSON těla pomocí akce
Definuj vstupní schéma akce a nech Total.js zamítat neplatné požadavky dřív, než se spustí tvůj kód.
Zpřístupnění akcí přes jeden API endpoint
Deklaruj endpointy ROUTE('API ...'), aby klient mohl volat mnoho akcí přes POST {schema, data} na jedné URL.
Čtení parametrů URL v trase
Deklaruj dynamické segmenty jako {id} v trase a čti je z $.params.
Zachycení mnoha URL trasou se zástupným znakem
Ukonči trasu znakem *, abys zachytil vše pod danou cestou, a pro výjimky ponech specifické trasy.
Obsluha každé HTTP metody
Deklaruj trasy pro GET, POST, PUT, PATCH a DELETE a čti metodu z $.method.
Omezení trasy pomocí flagů
Přidej @flagy jako @json, @xml nebo @upload, aby trasa odpovídala jen požadavkům, pro které je určena.
Čtení query stringu a těla požadavku
Použij $.query pro parametry URL a $.body pro JSON nebo data formuláře v handleru trasy.
Omezení velikosti payloadu a timeoutu trasy
Připoj k trase <1kb nebo <10s a omez velikost požadavku nebo čas, který může handler zabrat.
Deklarace typovaných parametrů trasy v akci
Použij volbu params v NEWACTION, aby Total.js ověřil parametry URL dřív, než se spustí tvůj kód.
Výběr způsobu odpovědi
Posílej JSON, HTML, čistý text, XML, přesměrování, prázdné odpovědi nebo binární data z handleru trasy.
Čtení hlaviček a práce s cookies
Čti hlavičky požadavku z $.headers, čti a zapisuj cookies přes $.cookie() a nastavuj hlavičky odpovědi.
Přijímání nahrávání souborů
Přijímej multipart/form-data s flagem @upload a čti nahrané soubory z $.files.
Povolení požadavků z jiných originů přes CORS
Zavolej CORS(), aby tvé trasy mohl z prohlížeče používat jeden origin, více originů nebo každý origin.
Vykreslení pohledu bez psaní handleru
Trasa bez handleru vykreslí pohled pojmenovaný podle své URL, nebo pohled, který uvedeš.
Vyberte správný typ vstupu pro akci
Vyberte typy vstupu, parametrů, poptávky a definice výstupu, včetně konverzí a zamítnutých hodnot.
Validace query stringu v akci
Deklaruj query v NEWACTION pro validaci a převod parametrů URL a čti vyčištěné hodnoty z $.query.
Filtrování odpovědi akce pomocí output
Deklaruj output, aby z akce odešla jen uvedená pole, například aby nikdy neunikl hash hesla.
Vyžadování uživatele nebo oprávnění v akci
Použij volby user a permissions v NEWACTION, aby autorizace byla u akce a ne v každé trase.
Ochrana tras pomocí AUTH
Ověř každý požadavek přes AUTH() a omez trasy na přihlášené nebo anonymní uživatele prefixy + a -.
Deklarace trasy uvnitř akce
Dej trasu do volby route v NEWACTION a měj URL, validaci a kód na jednom místě.
Přihlašování uživatelů vestavěnou session autentizací
Předej AUTH() objekt s volbami a získáš podepsané session cookies, úložiště sessions a odhlášení bez psaní infrastruktury.
Volání akce z vlastního kódu
Použij ACTION() ke spuštění akce z časovače, úlohy nebo jiné akce s vlastním payloadem, query a uživatelem.
Zřetězení více akcí v jedné trase
Vyjmenuj více akcí za --> a spusť je postupně nad stejným payloadem; pomocí (response) označ, která odpoví.
Přidání middleware k trase
Zaregistruj middleware přes MIDDLEWARE() a připoj ho k trasám flagem #name.
Stavba chatu přes WebSocket
Deklaruj trasu SOCKET, poslouchej zprávy a rozesílej je všem připojeným klientům.
Připojení k serveru WebSocket z Node
Použij WEBSOCKETCLIENT k otevření WebSocket spojení z tvé aplikace, posílání zpráv a reakci na odpovědi.
Oddělení kódu pomocí událostí
Vysílej a poslouchej události aplikace přes EMIT(), ON(), ONCE() a OFF(), aby se moduly nevolaly přímo.
Ukládání a čtení dat ve vestavěné databázi NoSQL
Vkládej a dotazuj dokumenty přes NOSQL() a zpřístupni je přes akce, bez instalace jakékoli databáze.
Dotazování databáze NoSQL
Filtruj, řaď, stránkuj a vybírej pole dokumentů přes where, in, between, search, sort, take, skip a fields.
Aktualizace a odstraňování dokumentů NoSQL
Měň dokumenty přes update() a where(), mazej je přes remove() a zjisti, kolik jich bylo dotčeno.
Přepínání databází přes API DATA
DATA adresuje tabulku jako databáze/tabulka, takže stejný kód dotazů funguje s vestavěným NoSQL i s dalšími databázemi.
Ukládání hodnot do paměti
Ukládej hodnoty přes CACHE.set() s expirací, čti je přes CACHE.get() a mazej přes remove() nebo reset().
Trvalé ukládání malých nastavení přes MEMORIZE
Měj na disku JSON objekt, který přežije restart, pro počítadla a nastavení, která nepotřebují databázi.
Generování jedinečných id a hashů
Vytvářej id přes UID() a GUID() a hashe přes HASH() a věz, které kde použít.
Ukládání pomalých výsledků na disk přes FILECACHE
Použij FILECACHE(), abys výsledek spočítal jednou a po určitou dobu ho znovu používal ze souboru, i po restartu.
Ukládání nahraných souborů přes FILESTORAGE
Ukládej nahrané soubory do spravovaného úložiště souborů přes file.fs() a posílej je zpět přes $.filefs().
Vykreslení pohledu s layoutem
Vykresli HTML pohled s modelem, procházej data a předávej hodnoty do layoutu.
Podmínky a escapování v pohledech
Větvi přes @{if}, @{else} a @{fi} a vybírej mezi escapovaným výstupem @{value} a surovým HTML @{!value}.
Procházení polí a objektů v pohledech
Opakuj značkování přes @{foreach} pro pole a objekty a používej index aktuální položky.
Vkládání pohledů a zdrojů
Znovu používej značkování přes @{view()} a přidávej skripty a styly přes @{import()}.
Plnění sekcí layoutu z pohledu
Deklaruj sekci v pohledu přes @{section} a vypiš ji v layoutu přes @{section('name')}; pro požadavek můžeš zvolit i jiný layout.
Přidání helperů do pohledů a čtení configu v pohledech
Zaregistruj funkce v DEF.helpers, aby šly volat z pohledů, a čti hodnoty configu přes @{'%key'}.
Převod Markdownu na HTML
Použij prototyp String.markdown() k vykreslení Markdown textu do HTML, pro obsah uložený uživateli nebo v souborech.
Generování textu pomocí šablon Tangular
Použij Tangular.render() k vyplnění šablon e-mailů, dokumentů a zpráv s podmínkami, cykly a helpery.
Renderujte šablony z textu, souborů a URL pomocí TEMPLATE
Použijte TEMPLATE() k vykreslení šablony Tangular, která je textem, souborem ze složky šablon nebo URL, s vlastními helpery a výchozím modelem.
Porovnejte dva seznamy pomocí DIFFARR: co přidat, aktualizovat a odebrat
Použijte DIFFARR() k porovnání položek uložených v databázi s položkami formuláře a získejte ty, které je třeba přidat, aktualizovat a odebrat.
Query Builder: DB() a NEWDB() s vlastní databázi
Vytvořte dotazy s DB().find().where().sort() a nechte řidiče registrovaného s NEWDB() je spustit, zatímco registrovaný řidič implementuje operaci databáze.
Konfigurace aplikace souborem config
Měj nastavení v souboru config a čti je přes CONF.
Šifrování a dešifrování dat klíčem
Měň objekty na neprůhledné tokeny přes ENCRYPT() a čti je zpět přes DECRYPT(), pro podepsané odkazy a krátkodobé tokeny.
Volejte externí služby přes API() a ovladače NEWAPI()
Zaregistrujte ovladač služby pomocí NEWAPI() a volejte jej z akcí pomocí API(name, schema, data) ve stejném stylu callbacku, chyby a promise jako query builder.
Rozhovor s jazykovými modely s AIMODEL(), NEWAIMODel() a AIPARSER()
Vytvořte žádost o chatování s AIMODEL(), nechte řidiče registrovaného s NEWAIMODL(), pošlete ji poskytovateli a přečtěte si streamované odpovědi s AIPARSER().
Omezení neúspěšných pokusů přes BLOCKED
Počítej pokusy podle IP adresy přes BLOCKED() a po dosažení limitu odpovídej 429, pro přihlášení a obnovu hesla.
Malí globální pomocníci: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY a PROMISIFY
Použijte globály aplikace, data, hluboké kopie, dotazní řádky a slibující pomocníky.
Shromažďujte chyby pomocí ErrorBuilder, zaznamenávejte je přes ERROR() a veďte auditní stopu přes AUDIT()
Odpovídejte více chybami najednou pomocí ErrorBuilder, odpovědi SUCCESS(), jak ERROR() zaznamenává selhání a jak AUDIT() připisuje do souboru, kdo co udělal.
Odkládejte práci pomocí setTimeout2() a clearTimeout2()
Použijte setTimeout2() ke spuštění funkce jednou poté, co přestanou přicházet volání; předchozí časovač se stejným id se nahradí, a zrušte jej pomocí clearTimeout2().
Tokeny vázané na prohlížeč pomocí ENCRYPTREQ() a DECRYPTREQ()
Zašifrujte hodnotu společně s user agentem (a volitelně IP adresou) požadavku a přečtěte ji zpět jen od stejného klienta.
Zálohujte složku pomocí BACKUP() a RESTORE() a spouštějte příkazy pomocí SHELL()
Zabalte adresář do jednoho souboru a znovu jej rozbalte pomocí BACKUP() a RESTORE() a spusťte příkaz shellu ve složce projektu pomocí SHELL().
Přepněte aplikaci do údržby pomocí PAUSESERVER()
Pozastavte server podle názvu, aby každý požadavek dostal stránku 503, obnovte jej a pamatujte, že bez druhého argumentu volání přepíná stav.
Obchodní pravidla jako text pomocí NEWMACRO()
Zkompilujte malá pravidla napsaná v jednoduchém jazyce (IF, ELSE, AND, OR, RETURN, volání helperů) do funkce, kterou spustíte s modelem, takže pravidla mohou žít v souboru nebo v databázi.
Servírování statických souborů ze složky public
Soubory v adresáři public se servírují automaticky, bez potřeby trasy.
Volejte jinou adresu pomocí AJAX() ze serveru
Použijte AJAX() k volání HTTP adresy s tělem JSON a získání zpracované odpovědi, jako promise nebo s callbackem, a zjistěte, co se stane s chybami a XML.
Volání dalších HTTP API přes RESTBuilder
Posílej požadavky GET a POST jiné službě, nastav hlavičky a timeout a čti stav a zpracovanou odpověď.
Uvolněte stream po jeho skončení pomocí CLEANUP()
Použijte CLEANUP() ke zničení streamu hned po jeho dokončení nebo selhání, aby nezůstaly otevřené deskriptory souborů, s callbackem nebo jako promise.
Překlad pohledu do více jazyků
Označ texty v pohledech pomocí @(...) a překlady dej do souborů zdrojů, které vybírá LOCALIZE().
Spouštějte kód podle plánu pomocí CRON
Zaregistrujte funkci přes CRON() a pětipoložkový cron řádek a zjistěte, kdy se kontrola provádí a jak úlohu odstranit.
Spouštějte náročnou práci ve vlákně nebo v podřízeném procesu
Použijte NEWTHREAD() ke spuštění worker vlákna, posílejte mu zprávy a čtěte odpovědi bez blokování hlavního procesu.
Sdílejte několik pracovních vláken pomocí NEWTHREADPOOL()
Spusťte pevný počet workerů, půjčte si jednoho přes pool.exec(), když je práce, vraťte jej přes release() a nechte ostatní úlohy čekat na volného workera.
Volejte jiné servery přes REQUEST a ukládejte soubory přes DOWNLOAD
Použijte REQUEST() pro nízkoúrovňová HTTP volání s plnou kontrolou nad metodou, hlavičkami, query a tělem a DOWNLOAD() ke stažení vzdáleného souboru na disk.
Odeslání e-mailu z pohledu
Nastavte SMTP v souboru config, vykreslete pohled jako tělo zprávy přes MAIL() a odešlete hotové HTML přes HTMLMAIL().
Přizpůsobte stránky 404 a 401
Zaregistrujte obslužné funkce ROUTE('#404') a ROUTE('#401') pro nahrazení vestavěných chybových stránek a spusťte je sami přes $.fallback().
Pošlete si zprávu pomocí LOGMAIL()
Odešlete prostý text nebo JSON na adresu bez šablony, pro logy a upozornění, přes stejné nastavení SMTP jako MAIL().
Odesílejte soubory a streamy klientovi
Servírujte soubor z disku přes $.file(), vynuťte název při stahování, posílejte generovaný obsah přes $.stream() a odpovězte 404, když soubor chybí.
Přesměrování požadavků na jiný server
Použijte PROXY() k přiřazení prefixu URL k cílovému serveru, zvolte způsob kopírování cesty a $.proxy() k přesměrování jedné trasy.
Zpřístupněte lokální server přes tunel pomocí PROXYSERVER() a PROXYCLIENT()
Nechte server Total.js s veřejnou adresou přeposílat požadavky programu, který běží jen na soukromém stroji, přes WebSocket tunel, který otevře soukromá strana.
Chraňte formuláře a požadavky tokeny CSRF
Vytvořte token přes $.csrf(), pošlete ho s požadavkem a ověřte ho v middleware, aby se požadavky z jiných stránek odmítly.
Seskupte akce do schématu a opakovaně používejte definice inputu
Použijte NEWSCHEMA() k deklaraci souvisejících akcí pod jedním názvem a sdílejte definici inputu mezi akcemi pomocí souboru v jsonschemas/.
Sestavte zpracovatelský řetězec pomocí transforms
Zaregistrujte více kroků pod jedním názvem přes NEWTRANSFORM() a nechte hodnotu projít jimi v pořadí přes TRANSFORM().
Výměna zpráv přes Total Messaging Service
Zapněte WebSocket endpoint TMS a nechte externí klienty přijímat publikované zprávy, posílat zprávy vaší aplikaci a volat její funkce.
Vytvořte kompletní REST zdroj pomocí akcí
Deklarujte akce query, read, insert, update, patch a remove nad databází NoSQL, s validací, kódem 404 pro chybějící záznamy a trasami, které přiřazují každou HTTP metodu.
Nastavte trasu WebSocket pomocí příznaků, autentizace a parametrů
Zvolte typ zpráv přes @text nebo @binary, vyžadujte přihlášeného uživatele prefixem +, ověřte token CSRF přes @csrf a čtěte parametry URL v trasách SOCKET.
Minifikace a spojování CSS, JavaScriptu a HTML
Statické soubory a odpovědi HTML se minifikují automaticky; použijte MERGE() k servírování více souborů jako jednoho a nastavení $minify k vypnutí.
Změna velikosti a převod obrázků
Zpracujte obrázky přes Image.load(), řetězte operace velikosti, ořezu a formátu, uložte výsledek, změřte jeho rozměry a servírujte náhledy přes $.image().
Zkontrolujte číselné hranice schématu namísto předpokladu celkové nucenosti
Zkontrolujte Int, SmallInt, TinyInt a Number2 s původními kompaktními schématy, včetně frakčních hodnot, nulových a out-of-range vstupů.
Používejte vestavěné pomocné funkce pro string, number, date a array
Total.js rozšiřuje String, Number, Date a Array o pomocné funkce pro slugy, hashe, formátování, parsování, seskupování a vyhledávání a nabízí U.extend() a U.clone() pro objekty.
Akční audity s nativním auditem
Sledujte možnost auditu a výslovně $.audit() volání bez kontaktu s logovací službou nebo psaní citlivého záznamu do aplikace.
Běh v režimu debug a release
Volby Total.run() vybírají mezi režimem debug a release; režim čtěte z DEBUG a trasy omezte na jeden režim pomocí @debug a @release.
Testujte aplikaci vestavěným spouštěčem testů
Napište test.js, který spustí aplikaci, zaregistruje testy přes Test.push(), výsledky kontroluje přes Test.print() a při selhání skončí s nenulovým kódem.
Použijte všechny CPU kódy v klastru
Začněte několik pracovních procesů za jedním portem s možností klastru Total.run(), a vědět, co je mezi nimi sdíleno a co není.
Načtěte modul JavaScriptu z URL pomocí IMPORT()
Stáhněte soubor s JavaScriptem z adresy, uložte jej do složky tmp, načtěte jej přes require a použijte to, co exportuje; druhé volání jej už nestahuje znovu.
Sestavte tok komponent pomocí Flow.load() a spusťte jej pomocí exec()
Popište FlowStream jako komponenty a spojení mezi nimi, načtěte jej v aplikaci, pošlete jím zprávu a přečtěte odpověď a změňte konfiguraci komponenty za běhu.
Otestujte komponentu Flow samostatně pomocí Flow.test()
Načtěte jednu komponentu do vlastního toku, pošlete jí zprávu z kódu a přečtěte, co posílá na své výstupy, bez sestavování celého toku.
Volejte program v Pythonu, který stále běží, pomocí PYPELINE()
Spusťte skript Pythonu z aplikace, posílejte mu zprávy JSON přes socket a přijímejte jeho odpovědi; pokud skript zanikne, restartuje se.
Enums a string formát validace hranice
Spustit pozitivní a negativní kompaktní schéma kontroly pro enum, Color, Base64, Zip, ikony, JSON a IP formáty.
TotalAPI a Componentator servisní limity
Zkontrolujte, zda je odvětví TotalAPI a Componentator lokálně zajištěno znovu, aniž byste prováděli externí hovory.
QueryBuilder operace, filtry a řidičská smlouva
Zkontrolujte původní možnosti DB a NEWDB, výsledky, zkreslení, chyby a tvary filtru, aniž byste zaměnili stavitele s ovladačem databáze.
Kompilace a spuštění domorodé složky serveru
Sbírejte důvěryhodnou složku Total.js HTML, vytvořte příklad, validujte zprávy, upravte je a uvolněte zdroje.
Řídící volání, manuální pověření a podmíněné odpovědi
Provádět jsonstring, reagovat, provést, úspěšně, autorizovat, přizpůsobit a naposledy upravené zpracování.
Akční dopravní možnosti a výslovné TMS publikování
Testovat csrf, šifrovat, komprimovat a publikovat proti skutečné HTTP a TMS namísto předpokladu, že metadata vynakládá chování.
Invalidní uvolňovací režim statických cache s Touch
Servisovat a upravovat dočasný statický soubor, vymazat jeho skryté zastoupení a odstranit skryté 404 vstupů.
OPENCLIENT RPC, události a sdílené připojení
Cvičit OPENCLIENT s lokální protokolovou fixou, včetně iniciace, callback korelace, časového odkladu a odstranění logického klienta.
Přihlašování souborů FlowStream a provedení izolovaných pracovníků
Spustit stejnou důvěryhodnou schématu FlowStream jako pracovní vlákna a dětský proces, stáhnout soubory .flow a odstranit příklady.
Akční životní cyklus, prodloužení výsledků a správci strážců
Cvičení oninput, onoutput, extend, sa a su s platnými, neplatnými a selhávajícími akcemi.
Reálné SQL s native QueryBuilder a SQLite transakce
Registrace omezeného řidiče SQLite, spuštění parametrizovaného CRUD a ověřování závazků, omezení selhání a zpětné vazby proti databázi podporované souborem.
Nabíjejte zdroje aplikace a vyhněte se překvapení balíčku
Spustit LOAD v samostatném procesu a ověřit NPMINSTALL opětovné použití již dostupného balíčku bez přístupu k síti.
Vyhledejte místní adresář LDAP
Vyhledejte izolovanou příklad OpenLDAP a ověřte výsledek spojení v celkovém počtu 5 0.0.19.
Soubory aplikace jako balíček Total.js
Vytvořte místní balíček, načte jeho definice prostřednictvím nákladu Startup a ověřte extrakci do .src.
Své nahrané soubory čistí a vytváří dotazy odkazy
Zkontrolujte výchozí nahrávku, autoklear(false), explicitní jasné a href dotaz nahradit.