Total.js 5 (backend)
Rutter, actions, scheman, databaser, WebSocket, vyer och allt som körs på servern.
Validera en JSON-body med en action
Definiera ett indataschema på en action och låt Total.js avvisa ogiltiga förfrågningar innan din kod körs.
Exponera actions via en enda API-endpoint
Deklarera ROUTE('API ...')-endpoints så att en klient kan anropa många actions med POST {schema, data} på en enda URL.
Läs URL-parametrar i en route
Deklarera dynamiska segment som {id} i en route och läs dem från $.params.
Fånga många URL:er med en wildcard-route
Avsluta en route med * för att matcha allt under en sökväg och behåll specifika routes för undantagen.
Hantera varje HTTP-metod
Deklarera routes för GET, POST, PUT, PATCH och DELETE och läs metoden från $.method.
Begränsa en route med flaggor
Lägg till @flaggor som @json, @xml eller @upload så att en route bara matchar de förfrågningar den är avsedd för.
Läs query string och request-body
Använd $.query för URL-parametrarna och $.body för JSON- eller formulärdata i en route-handler.
Begränsa payloadstorlek och timeout för en route
Lägg till <1kb eller <10s på en route för att begränsa förfrågans storlek eller den tid handlern får ta.
Deklarera typade routeparametrar i en action
Använd alternativet params i NEWACTION så att Total.js validerar URL-parametrarna innan din kod körs.
Välj hur du svarar
Skicka JSON, HTML, ren text, XML, omdirigeringar, tomma svar eller binärdata från en route-handler.
Läs headers och arbeta med cookies
Läs request-headers från $.headers, läs och skriv cookies med $.cookie() och sätt response-headers.
Ta emot filuppladdningar
Acceptera multipart/form-data med flaggan @upload och läs de uppladdade filerna från $.files.
Tillåt cross-origin-förfrågningar med CORS
Anropa CORS() för att låta en origin, flera origins eller alla origins använda dina routes från en webbläsare.
Rendera en vy utan att skriva en handler
En route utan handler renderar vyn som är uppkallad efter dess URL, eller den vy du anger.
Välj rätt typ av input för en åtgärd
Välj typer för inmatning, parametrar, frågeställningar och utgångsdefinitioner, inklusive omvandlingar och avvisade värden.
Validera query string i en action
Deklarera query i NEWACTION för att validera och konvertera URL-parametrarna, och läs de rensade värdena från $.query.
Filtrera svaret från en action med output
Deklarera output så att bara de angivna fälten lämnar actionen, till exempel för att aldrig läcka en lösenordshash.
Kräv en användare eller en behörighet i en action
Använd alternativen user och permissions i NEWACTION så att auktoriseringen ligger vid actionen och inte i varje route.
Skydda routes med AUTH
Autentisera varje förfrågan med AUTH() och begränsa routes till inloggade eller anonyma användare med prefixen + och -.
Deklarera routen inuti actionen
Lägg routen i route-alternativet i NEWACTION och ha URL, validering och kod på ett ställe.
Logga in användare med den inbyggda sessionsautentiseringen
Ge AUTH() ett alternativobjekt för att få signerade sessionscookies, ett sessionslager och utloggning utan att skriva infrastrukturen.
Anropa en action från din egen kod
Använd ACTION() för att köra en action från en timer, ett jobb eller en annan action, med egen payload, query och användare.
Kedja flera actions i en route
Lista flera actions efter --> för att köra dem i följd på samma payload och markera vilken som svarar med (response).
Lägg till en middleware på en route
Registrera en middleware med MIDDLEWARE() och koppla den till routes med flaggan #name.
Bygg en WebSocket-chatt
Deklarera en SOCKET-route, lyssna på meddelanden och sänd dem till alla anslutna klienter.
Anslut till en WebSocket-server från Node
Använd WEBSOCKETCLIENT för att öppna en WebSocket-anslutning från din app, skicka meddelanden och reagera på svaren.
Frikoppla din kod med events
Skicka och lyssna på applikations-events med EMIT(), ON(), ONCE() och OFF() så att moduler inte anropar varandra direkt.
Lagra och läs data med den inbyggda NoSQL-databasen
Infoga och fråga dokument med NOSQL() och exponera dem via actions, utan att installera någon databas.
Fråga NoSQL-databasen
Filtrera, sortera, paginera och projicera dokument med where, in, between, search, sort, take, skip och fields.
Uppdatera och ta bort NoSQL-dokument
Ändra dokument med update() och where(), ta bort dem med remove() och läs hur många som berördes.
Använd DATA-API:et för att byta databas
DATA adresserar en tabell som databas/tabell, så att samma frågekod fungerar med den inbyggda NoSQL och med andra databaser.
Cacha värden i minnet
Spara värden med CACHE.set() och en utgångstid, läs dem med CACHE.get() och rensa dem med remove() eller reset().
Spara små inställningar permanent med MEMORIZE
Behåll ett JSON-objekt på disk som överlever omstarter, för räknare och inställningar som inte behöver en databas.
Generera unika id:n och hashar
Skapa id:n med UID() och GUID() och hashar med HASH(), och vet vilken du ska använda var.
Cacha långsamma resultat på disk med FILECACHE
Använd FILECACHE() för att beräkna ett resultat en gång och återanvända det från en fil under en period, även efter en omstart.
Lagra uppladdade filer med FILESTORAGE
Spara uppladdningar i ett hanterat fillager med file.fs() och skicka tillbaka dem med $.filefs().
Rendera en vy med en layout
Rendera en HTML-vy med en modell, loopa över data och skicka värden till layouten.
Använd villkor och escaping i vyer
Förgrena med @{if}, @{else} och @{fi} och välj mellan escapad utdata @{value} och rå HTML @{!value}.
Loopa över arrayer och objekt i vyer
Upprepa markup med @{foreach} för arrayer och objekt och använd indexet för det aktuella elementet.
Inkludera vyer och tillgångar
Återanvänd markup med @{view()} och lägg till skript och stilar med @{import()}.
Fyll layoutens sektioner från en vy
Deklarera en sektion i en vy med @{section} och skriv ut den i layouten med @{section('name')}, och välj en annan layout per förfrågan.
Lägg till vyhelpers och läs config i vyer
Registrera funktioner i DEF.helpers för att anropa dem från vyer och läs config-värden med @{'%key'}.
Konvertera Markdown till HTML
Använd prototypen String.markdown() för att rendera Markdown-text till HTML, för innehåll som användare sparat eller som finns i filer.
Generera text med Tangular-mallar
Använd Tangular.render() för att fylla i mallar för e-post, dokument och meddelanden med villkor, loopar och helpers.
Rendera mallar från text, filer och URL:er med TEMPLATE
Använd TEMPLATE() för att rendera en Tangular-mall som är en text, en fil i mallmappen eller en URL, med egna helpers och en standardmodell.
Jämför två listor med DIFFARR: vad som ska läggas till, uppdateras och tas bort
Använd DIFFARR() för att jämföra posterna som sparats i databasen med posterna i ett formulär och få fram de som ska läggas till, uppdateras och tas bort.
Query Builder: DB() och NEWDB() med din egen databasdrivare
Bygg frågor med DB(.find().where(.sort() och låt en registrerad drivrutiner köra dem, medan en registrerat drivrutin implementerar stödda databasverksamhet.
Konfigurera appen med filen config
Behåll inställningar i en config-fil och läs dem via CONF.
Kryptera och dekryptera data med en nyckel
Förvandla objekt till ogenomskinliga tokens med ENCRYPT() och läs tillbaka dem med DECRYPT(), för signerade länkar och kortlivade tokens.
Anropa externa tjänster med API() och drivrutinerna i NEWAPI()
Registrera en drivrutin för en tjänst med NEWAPI() och anropa den från åtgärder med API(name, schema, data), i samma stil för callback, fel och löfte som query buildern.
Talk till språkmodeller med AIMODEL(), NEWAIMODELL() och AIPARSER()
Bygg en chat-förfrågan med AIMODEL(), låt en förare som är registrerad med NEWAIMODELL() skicka den till en leverantör, och läs streamed svar med AIPARSER().
Begränsa misslyckade försök med BLOCKED
Räkna försök per IP-adress med BLOCKED() och svara 429 när gränsen nåtts, för inloggningar och lösenordsåterställningar.
De små globala hjälparna: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY och PROMISIFY
Använd applikation globaler, datum, djupa kopior, frågefälten och lovande hjälpare.
Samla fel fel med ErrorBuilder, logga dem med ERROR() och för ett granskningsspår med AUDIT()
Svara med flera fel samtidigt med ErrorBuilder, svaret SUCCESS(), hur ERROR() registrerar misslyckanden och hur AUDIT() lägger till i en loggfil vem som gjorde vad.
Skjut upp arbete med setTimeout2() och clearTimeout2()
Använd setTimeout2() för att köra en funktion en gång efter att anropen slutat komma, där den tidigare timern med samma id ersätts, och avbryt den med clearTimeout2().
Token kopplade till en webbläsare med ENCRYPTREQ() och DECRYPTREQ()
Kryptera ett värde tillsammans med förfrågans user agent (och valfritt IP-adressen) och läs tillbaka det bara från samma klient.
Säkerhetskopiera en mapp med BACKUP() och RESTORE(), och kör kommandon med SHELL()
Packa en katalog till en enda fil och packa upp den igen med BACKUP() och RESTORE(), och kör ett skalkommando i projektmappen med SHELL().
Sätt applikationen i underhåll med PAUSESERVER()
Pausa servern med ett namn så att varje förfrågan får en 503-sida, återuppta den och vet att anropet utan andra argument växlar.
Affärsregler som text med NEWMACRO()
Kompilera små regler skrivna i ett enkelt språk (IF, ELSE, AND, OR, RETURN, helper-anrop) till en funktion som du kör med en modell, så att reglerna kan finnas i en fil eller en databas.
Servera statiska filer från mappen public
Filer i katalogen public serveras automatiskt, utan att någon route behövs.
Anropa en annan adress med AJAX() från servern
Använd AJAX() för att anropa en HTTP-adress med en JSON-kropp och få det tolkade svaret, som löfte eller med callback, och vet vad som händer med fel och XML.
Anropa andra HTTP-API:er med RESTBuilder
Gör GET- och POST-förfrågningar till en annan tjänst, sätt headers och en timeout och läs status och det tolkade svaret.
Frigör en ström när den slutar med CLEANUP()
Använd CLEANUP() för att förstöra en ström så snart den är klar eller har misslyckats, så att inga filhandtag lämnas öppna, med en callback eller som ett löfte.
Översätt en vy till flera språk
Markera texter i vyer med @(...) och ange översättningar i resursfiler som väljs av LOCALIZE().
Kör kod enligt ett schema med CRON
Registrera en funktion med CRON() och en cron-rad med fem fält, och lär dig när kontrollen körs och hur man tar bort ett jobb.
Köra tungt arbete i en tråd eller en barnprocess
Använd NEWTHREAD() för att starta en workertråd, skicka meddelanden till den och läsa svaren utan att blockera huvudprocessen.
Dela några arbetstrådar med NEWTHREADPOOL()
Starta ett fast antal workers, låna en med pool.exec() när det finns arbete, lämna tillbaka den med release() och låt övriga jobb vänta på en ledig worker.
Anropa andra servrar med REQUEST och spara filer med DOWNLOAD
Använd REQUEST() för HTTP-anrop på låg nivå med full kontroll över metod, headers, query och body, och DOWNLOAD() för att strömma en fjärrfil till disk.
Skicka e-post från en vy
Konfigurera SMTP i filen config, rendera en vy som meddelandetext med MAIL() och skicka färdig HTML med HTMLMAIL().
Anpassa sidorna 404 och 401
Registrera hanterare med ROUTE('#404') och ROUTE('#401') för att ersätta de inbyggda felsidorna, och utlös dem själv med $.fallback().
Skicka ett meddelande till dig själv med LOGMAIL()
Skicka ett vanligt text- eller JSON-meddelande till en adress utan vy, för loggar och larm, med samma SMTP-inställningar som MAIL().
Skicka filer och strömmar till klienten
Servera en fil från disk med $.file(), tvinga fram ett nedladdningsnamn, strömma genererat innehåll med $.stream() och svara 404 när filen saknas.
Vidarebefordra förfrågningar till en annan server
Använd PROXY() för att koppla ett URL-prefix till en uppströmsserver, välj hur sökvägen kopieras och $.proxy() för att vidarebefordra en enskild rutt.
Publicera en lokal server genom en tunnel med PROXYSERVER() och PROXYCLIENT()
Låt en Total.js-server med offentlig adress vidarebefordra förfrågningar till ett program som bara körs på en privat maskin, med en WebSocket-tunnel som den privata sidan öppnar.
Skydda formulär och förfrågningar med CSRF-token
Skapa en token med $.csrf(), skicka med den i förfrågan och verifiera den i en middleware så att förfrågningar från andra webbplatser avvisas.
Gruppera actions i ett schema och återanvänd input-definitioner
Använd NEWSCHEMA() för att deklarera sammanhörande actions under ett namn och dela en input-definition mellan actions med en fil i jsonschemas/.
Bygg en bearbetningspipeline med transforms
Registrera flera steg under ett namn med NEWTRANSFORM() och låt ett värde gå igenom dem i ordning med TRANSFORM().
Utbyt meddelanden med Total Messaging Service
Slå på TMS WebSocket-slutpunkten och låt externa klienter ta emot publicerade meddelanden, skicka meddelanden till din app och anropa dess funktioner.
Bygg en komplett REST-resurs med actions
Deklarera actions för query, read, insert, update, patch och remove över NoSQL-databasen, med validering, ett 404 för saknade poster och rutter som kopplar varje HTTP-metod.
Konfigurera en WebSocket-rutt med flaggor, autentisering och parametrar
Välj meddelandetyp med @text eller @binary, kräv en inloggad användare med prefixet +, kontrollera en CSRF-token med @csrf och läs URL-parametrar i SOCKET-rutter.
Minifiera och slå ihop CSS, JavaScript och HTML
Statiska filer och HTML-svar minifieras automatiskt; använd MERGE() för att servera flera filer som en och inställningarna $minify för att stänga av det.
Ändra storlek på och konvertera bilder
Bearbeta bilder med Image.load(), kedja operationer för storlek, beskärning och format, spara resultatet, mät dess storlek och servera miniatyrer med $.image().
Kontrollera gränserna för det numeriska schemat i stället för att anta en fullständig tvång
Kontrollera Int, SmallInt, TinyInt och Number2 med inhemska kompakta scheman, inklusive fraktionsvärden, noll- och out-of-range-inmatningar.
Använd de inbyggda hjälpfunktionerna för string, number, date och array
Total.js utökar String, Number, Date och Array med hjälpfunktioner för slugs, hashar, formatering, tolkning, gruppering och sökning och erbjuder U.extend() och U.clone() för objekt.
Rekordhandlingar med en inhemska revision
Observera revisionsalternativet och uttryckliga $.audit() samtal utan att kontakta en loggtjänst eller skriva känslig inmatning till en ansökan logg.
Köra i debug- och releaseläge
Alternativen i Total.run() väljer mellan debug- och releaseläge; läs läget från DEBUG och begränsa rutter till ett läge med @debug och @release.
Testa applikationen med den inbyggda testkörningen
Skriv en test.js som startar appen, registrerar tester med Test.push(), kontrollerar resultat med Test.print() och avslutas med en kod skild från noll när ett test misslyckas.
Använd alla CPU-kärnor med klusterläget
Börja flera arbetsprocesser bakom en enda port med klusteralternativet Total.run(), och veta vad som delas mellan dem och vad som inte är.
Ladda en JavaScript-modul från en URL med IMPORT()
Ladda ner en fil med JavaScript från en adress, behåll den i mappen tmp, ladda den med require och använd det den exporterar; det andra anropet laddar inte ner den igen.
Bygg ett flöde av komponenter med Flow.load() och kör det med exec()
Beskriv en FlowStream som komponenter och kopplingarna mellan dem, ladda den i applikationen, skicka ett meddelande genom den och läs svaret, och ändra konfigurationen för en komponent medan den körs.
Testa en Flow-komponent för sig med Flow.test()
Ladda en komponent i ett eget flöde, skicka ett meddelande till den från koden och läs vad den skickar till sina utgångar, utan att bygga hela flödet.
Anropa ett Python-program som fortsätter köra med PYPELINE()
Starta ett Python-skript från applikationen, skicka JSON-meddelanden till det över en socket och ta emot dess svar, med skriptet omstartat om det dör.
Enums och stringformat valideringsgränser
Kör positiva och negativa compact-schema kontroller för enum, färg, Base64, Zip, ikoner, JSON och IP format.
TotalAPI och Componentator service gränser
Kontrollera den inaktiverade TotalAPI-branschen och Componentator lokalt återanvändning utan att göra externa service samtal.
QueryBuilder-verksamhet, filter och föraravtal
Inspektera inhemska DB- och NEWDB-alternativ, resultat, uppbrott, fel och filterformer utan att förväxla en byggare med en databasdrivare.
Kompilera och köra en inhemska serverkomponent
Kompilera tillförlitlig Total.js HTML-komponent, skapa ett exempel, validera meddelanden, konfigurera den och släppa dess resurser.
Kontrollera callbacks, manuell auktorisering och villkorliga svar
Utföra jsonstring, svara, gjort, framgångsrik, auktoriserad, anpassad och senast modifierad hantering.
Åtgärd transportalternativ och uttrycklig TMS publicering
Test CSRF, kryptera, komprimera och publicera mot verkliga HTTP och TMS istället för att anta metadata utövas beteende.
Invaliderar frisläpps-läge statiska cachor med Touch
Serve och modifiera en tillfällig statisk fil, ta bort dess cached representation och ta bort cached 404 entries.
OPENCLIENT RPC, händelser och delade anslutningar
Öva OPENCLIENT med en lokal protokoll fixering, inklusive initialisering, callback korrelation, timout och logisk-klient borttagning.
Ladda upp FlowStream-filer och utföra isolerade arbetare
Kör samma tillförlitliga FlowStream schema som en arbetare tråd och ett barn process, ladda .flow filer och ta bort instanser.
Aktionslivscykel hål, resultat förlängning och administratör guards
Öva oninput, onoutput, extend, sa och su med giltiga, ogiltiga och misslyckade åtgärder.
Real SQL med native QueryBuilder och SQLite transaktioner
Registrera en begränsad SQLite-drivrutin, köra parameterad CRUD och verifiera uppgiften, begränsa misslyckandet och rulla tillbaka mot en filbaserad databas.
Ladda upp applikationsresurser och undvika löptidspaket överraskningar
Kör LOAD i en separat process och verifiera att NPMINSTALL återanvänder ett redan tillgängligt paket utan nätverksåtkomst.
Sök efter en verklig lokal LDAP-direktiv
Fråga en isolerad OpenLDAP-instans och verifiera bindresultatet i totalt 5 0,19.
Förpackningsfiler som en Total.js-paket
Skapa ett lokalt paket, ladda upp dess definitioner genom ramstartladdaren och verifiera extraktionen till .src.
Själva uppladdade filer rengöring och bygga frågor länkar
Kontrollera standarduppladdning rengöring, autoclear(falsk), explicit tydlig och href fråga ersättning.