Total.js 5 (backend)
Routes, acties, schema’s, databases, WebSocket, views en alles wat op de server draait.
Een JSON-body valideren met een actie
Definieer een invoerschema op een actie en laat Total.js ongeldige verzoeken afwijzen voordat jouw code draait.
Acties beschikbaar stellen via één API-endpoint
Declareer ROUTE('API ...')-endpoints zodat een client veel acties kan aanroepen met POST {schema, data} op één URL.
URL-parameters in een route lezen
Declareer dynamische segmenten zoals {id} in een route en lees ze uit $.params.
Veel URL's opvangen met een wildcard-route
Eindig een route met * om alles onder een pad te vangen en bewaar specifieke routes voor de uitzonderingen.
Elke HTTP-methode afhandelen
Declareer routes voor GET, POST, PUT, PATCH en DELETE en lees de methode uit $.method.
Een route beperken met flags
Voeg @flags toe zoals @json, @xml of @upload zodat een route alleen past bij de verzoeken waarvoor hij bedoeld is.
De query string en de request-body lezen
Gebruik $.query voor de URL-parameters en $.body voor JSON- of formuliergegevens in een route-handler.
De payloadgrootte en de timeout van een route beperken
Voeg <1kb of <10s toe aan een route om de grootte van het verzoek of de tijd van de handler te begrenzen.
Getypeerde routeparameters in een actie declareren
Gebruik de optie params van NEWACTION zodat Total.js de URL-parameters valideert voordat jouw code draait.
Kiezen hoe je antwoordt
Stuur JSON, HTML, platte tekst, XML, redirects, lege antwoorden of binaire gegevens vanuit een route-handler.
Headers lezen en met cookies werken
Lees request-headers uit $.headers, lees en schrijf cookies met $.cookie() en stel response-headers in.
Bestandsuploads ontvangen
Accepteer multipart/form-data met de flag @upload en lees de geüploade bestanden uit $.files.
Cross-origin-verzoeken toestaan met CORS
Roep CORS() aan om één origin, meerdere origins of elke origin je routes vanuit een browser te laten gebruiken.
Een view renderen zonder handler te schrijven
Een route zonder handler rendert de view die naar zijn URL is genoemd, of de view die je opgeeft.
Kies de juiste input type voor een actie
Selecteer typen voor input, parameter, query en output definities, inclusief conversies en afgewezen waarden.
De query string in een actie valideren
Declareer query in NEWACTION om de URL-parameters te valideren en om te zetten, en lees de opgeschoonde waarden uit $.query.
Het antwoord van een actie filteren met output
Declareer output zodat alleen de genoemde velden de actie verlaten, bijvoorbeeld om nooit een wachtwoordhash te lekken.
Een gebruiker of permissie vereisen in een actie
Gebruik de opties user en permissions van NEWACTION zodat autorisatie bij de actie staat en niet in elke route.
Routes beschermen met AUTH
Authenticeer elk verzoek met AUTH() en beperk routes tot ingelogde of anonieme gebruikers met de voorvoegsels + en -.
De route binnen de actie declareren
Zet de route in de optie route van NEWACTION en houd URL, validatie en code op één plek.
Gebruikers inloggen met de ingebouwde sessie-authenticatie
Geef AUTH() een optie-object voor ondertekende sessiecookies, een sessieopslag en uitloggen zonder de infrastructuur te schrijven.
Een actie aanroepen vanuit je eigen code
Gebruik ACTION() om een actie uit te voeren vanuit een timer, een job of een andere actie, met eigen payload, query en gebruiker.
Meerdere acties in één route koppelen
Som meerdere acties op na --> om ze na elkaar uit te voeren op dezelfde payload en geef met (response) aan welke antwoordt.
Een middleware aan een route toevoegen
Registreer een middleware met MIDDLEWARE() en koppel hem aan routes met de flag #name.
Een WebSocket-chat bouwen
Declareer een SOCKET-route, luister naar berichten en stuur ze naar alle verbonden clients.
Vanuit Node verbinden met een WebSocket-server
Gebruik WEBSOCKETCLIENT om vanuit je app een WebSocket-verbinding te openen, berichten te sturen en op antwoorden te reageren.
Je code ontkoppelen met events
Verstuur en beluister applicatie-events met EMIT(), ON(), ONCE() en OFF() zodat modules elkaar niet rechtstreeks aanroepen.
Gegevens opslaan en lezen met de ingebouwde NoSQL-database
Voeg documenten in en bevraag ze met NOSQL() en stel ze beschikbaar via acties, zonder een database te installeren.
De NoSQL-database bevragen
Filter, sorteer, pagineer en projecteer documenten met where, in, between, search, sort, take, skip en fields.
NoSQL-documenten bijwerken en verwijderen
Wijzig documenten met update() en where(), verwijder ze met remove() en lees hoeveel er geraakt zijn.
De DATA-API gebruiken om van database te wisselen
DATA adresseert een tabel als database/tabel, zodat dezelfde querycode werkt met de ingebouwde NoSQL en met andere databases.
Waarden in het geheugen cachen
Bewaar waarden met CACHE.set() en een verlooptijd, lees ze met CACHE.get() en wis ze met remove() of reset().
Kleine instellingen bewaren met MEMORIZE
Houd een JSON-object op schijf dat herstarts overleeft, voor tellers en instellingen die geen database nodig hebben.
Unieke id's en hashes genereren
Maak id's met UID() en GUID() en hashes met HASH(), en weet welke je waar gebruikt.
Trage resultaten op schijf cachen met FILECACHE
Gebruik FILECACHE() om een resultaat één keer te berekenen en een periode uit een bestand te hergebruiken, zelfs na een herstart.
Geüploade bestanden opslaan met FILESTORAGE
Bewaar uploads in een beheerde bestandsopslag met file.fs() en stuur ze terug met $.filefs().
Een view met een layout renderen
Render een HTML-view met een model, loop over gegevens en geef waarden door aan de layout.
Voorwaarden en escaping in views gebruiken
Vertak met @{if}, @{else} en @{fi}, en kies tussen geëscapete uitvoer @{value} en ruwe HTML @{!value}.
Over arrays en objecten lopen in views
Herhaal markup met @{foreach} voor arrays en objecten en gebruik de index van het huidige element.
Views en assets opnemen
Hergebruik markup met @{view()} en voeg scripts en stijlen toe met @{import()}.
Secties van de layout vullen vanuit een view
Declareer een sectie in een view met @{section} en druk hem in de layout af met @{section('name')}, en kies per verzoek een andere layout.
View-helpers toevoegen en de config in views lezen
Registreer functies in DEF.helpers om ze vanuit views aan te roepen en lees config-waarden met @{'%key'}.
Markdown naar HTML omzetten
Gebruik het prototype String.markdown() om Markdown-tekst naar HTML te renderen, voor inhoud van gebruikers of uit bestanden.
Tekst genereren met Tangular-templates
Gebruik Tangular.render() om templates voor e-mails, documenten en berichten te vullen met voorwaarden, lussen en helpers.
Render templates uit tekst, bestanden en URL's met TEMPLATE
Gebruik TEMPLATE() om een Tangular-template te renderen die een tekst, een bestand uit de templatemap of een URL is, met eigen helpers en een standaardmodel.
Vergelijk twee lijsten met DIFFARR: wat toe te voegen, bij te werken en te verwijderen
Gebruik DIFFARR() om de in de database opgeslagen items te vergelijken met die van een formulier en krijg de items die moeten worden toegevoegd, bijgewerkt en verwijderd.
Query Builder: DB() en NEWDB() met uw eigen database driver
Build queries with DB(.find().where(.sort() en laat een geregistreerde bestuurder met NEWDB() ze uitvoeren, terwijl een geregisterde bestuurder implementaties ondersteunde databankactiviteiten.
De app configureren met het bestand config
Houd instellingen in een bestand config en lees ze via CONF.
Gegevens met een sleutel versleutelen en ontsleutelen
Zet objecten om in ondoorzichtige tokens met ENCRYPT() en lees ze terug met DECRYPT(), voor ondertekende links en kortlevende tokens.
Roep externe diensten aan met API() en de drivers van NEWAPI()
Registreer een driver voor een dienst met NEWAPI() en roep hem aan vanuit acties met API(name, schema, data), in dezelfde stijl van callback, fout en promise als de query builder.
Spreek naar taalmodellen met AIMODEL(), NEWAIMODELL() en AIPARSER()
Maak een chatverzoek met AIMODEL(), laat een chauffeur geregistreerd met NEWAIMODAL() het verzenden aan een provider, en lees de streamed antwoorden met AIPARSER().
Mislukte pogingen beperken met BLOCKED
Tel pogingen per IP-adres met BLOCKED() en antwoord 429 zodra de limiet is bereikt, voor logins en wachtwoordresets.
De kleine wereldwijde assistenten: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY en PROMISIFY
Gebruik applicatie-globalen, datum, diepe kopieën, vragenlijsten en beloofde hulpverleners.
Verzamel fouten met ErrorBuilder, registreer ze met ERROR() en houd een auditspoor bij met AUDIT()
Antwoord met meerdere fouten tegelijk met ErrorBuilder, het antwoord SUCCESS(), hoe ERROR() mislukkingen registreert en hoe AUDIT() aan een logbestand toevoegt wie wat deed.
Stel werk uit met setTimeout2() en clearTimeout2()
Gebruik setTimeout2() om een functie één keer uit te voeren nadat de aanroepen ophouden, waarbij de vorige timer met hetzelfde id wordt vervangen, en annuleer hem met clearTimeout2().
Tokens gekoppeld aan een browser met ENCRYPTREQ() en DECRYPTREQ()
Versleutel een waarde samen met de user agent (en optioneel het IP-adres) van het verzoek en lees haar alleen terug van dezelfde client.
Maak een back-up van een map met BACKUP() en RESTORE(), en voer opdrachten uit met SHELL()
Pak een map in één bestand en pak het weer uit met BACKUP() en RESTORE(), en voer een shellopdracht uit in de projectmap met SHELL().
Zet de applicatie in onderhoud met PAUSESERVER()
Pauzeer de server op naam zodat elk verzoek een 503-pagina krijgt, hervat hem en weet dat de aanroep zonder tweede argument omschakelt.
Bedrijfsregels als tekst met NEWMACRO()
Compileer kleine regels in een eenvoudige taal (IF, ELSE, AND, OR, RETURN, helper-aanroepen) tot een functie die je met een model uitvoert, zodat de regels in een bestand of een database kunnen leven.
Statische bestanden uit de map public serveren
Bestanden in de map public worden automatisch geserveerd, zonder route.
Roep vanaf de server een ander adres aan met AJAX()
Gebruik AJAX() om een HTTP-adres aan te roepen met een JSON-body en het geparste antwoord te krijgen, als promise of met een callback, en weet wat er gebeurt met fouten en XML.
Andere HTTP-API's aanroepen met RESTBuilder
Doe GET- en POST-verzoeken naar een andere service, stel headers en een timeout in en lees de status en het geparsede antwoord.
Geef een stream vrij als hij eindigt met CLEANUP()
Gebruik CLEANUP() om een stream te vernietigen zodra hij klaar is of is mislukt, zodat er geen bestandshandles open blijven, met een callback of als promise.
Een view in meerdere talen vertalen
Markeer teksten in views met @(...) en lever vertalingen in resourcebestanden die LOCALIZE() kiest.
Code volgens een schema uitvoeren met CRON
Registreer een functie met CRON() en een cron-regel van vijf velden, en leer wanneer de controle draait en hoe je een taak verwijdert.
Zwaar werk uitvoeren in een thread of kindproces
Gebruik NEWTHREAD() om een workerthread te starten, er berichten naartoe te sturen en de antwoorden te lezen zonder het hoofdproces te blokkeren.
Deel een paar worker-threads met NEWTHREADPOOL()
Start een vast aantal workers, leen er een met pool.exec() als er werk is, geef hem terug met release() en laat de andere taken wachten op een vrije worker.
Andere servers aanroepen met REQUEST en bestanden opslaan met DOWNLOAD
Gebruik REQUEST() voor HTTP-aanroepen op laag niveau met volledige controle over methode, headers, query en body, en DOWNLOAD() om een extern bestand naar schijf te streamen.
Een e-mail versturen vanuit een view
Configureer SMTP in het bestand config, render een view als berichttekst met MAIL() en verstuur kant-en-klare HTML met HTMLMAIL().
De pagina's 404 en 401 aanpassen
Registreer handlers ROUTE('#404') en ROUTE('#401') om de ingebouwde foutpagina's te vervangen en roep ze zelf aan met $.fallback().
Stuur jezelf een bericht met LOGMAIL()
Stuur een gewone tekst of JSON naar een adres zonder view, voor logs en meldingen, via dezelfde SMTP-instellingen als MAIL().
Bestanden en streams naar de client sturen
Lever een bestand van schijf met $.file(), forceer een downloadnaam, stream gegenereerde inhoud met $.stream() en antwoord met 404 als het bestand ontbreekt.
Verzoeken doorsturen naar een andere server
Gebruik PROXY() om een URL-prefix aan een upstream-server te koppelen, kies hoe het pad wordt gekopieerd en gebruik $.proxy() om één route door te sturen.
Publiceer een lokale server via een tunnel met PROXYSERVER() en PROXYCLIENT()
Laat een Total.js-server met een openbaar adres verzoeken doorsturen naar een programma dat alleen op een privémachine draait, met een WebSocket-tunnel die de privékant opent.
Formulieren en verzoeken beschermen met CSRF-tokens
Maak een token met $.csrf(), stuur het mee met het verzoek en controleer het in een middleware zodat verzoeken van andere sites worden geweigerd.
Acties groeperen in een schema en input-definities hergebruiken
Gebruik NEWSCHEMA() om samenhangende acties onder één naam te declareren en deel een input-definitie tussen acties met een bestand in jsonschemas/.
Een verwerkingspijplijn bouwen met transforms
Registreer meerdere stappen onder één naam met NEWTRANSFORM() en laat een waarde er in volgorde doorheen lopen met TRANSFORM().
Berichten uitwisselen met de Total Messaging Service
Schakel het TMS-WebSocket-eindpunt in en laat externe clients gepubliceerde berichten ontvangen, berichten naar je app sturen en haar functies aanroepen.
Een volledige REST-resource bouwen met acties
Declareer de acties query, read, insert, update, patch en remove op de NoSQL-database, met validatie, een 404 voor ontbrekende records en routes die elke HTTP-methode koppelen.
Een WebSocket-route configureren met vlaggen, authenticatie en parameters
Kies het berichttype met @text of @binary, eis een ingelogde gebruiker met het voorvoegsel +, controleer een CSRF-token met @csrf en lees URL-parameters in SOCKET-routes.
CSS, JavaScript en HTML minificeren en samenvoegen
Statische bestanden en HTML-antwoorden worden automatisch geminificeerd; gebruik MERGE() om meerdere bestanden als één te leveren en de $minify-instellingen om het uit te zetten.
Afbeeldingen schalen en converteren
Verwerk afbeeldingen met Image.load(), koppel bewerkingen voor formaat, uitsnede en formaat aan elkaar, sla het resultaat op, meet de afmetingen en lever miniaturen met $.image().
Controleer de numerieke schema-grenzen in plaats van een volledige coercium te nemen
Check Int, SmallInt, TinyInt en Number2 met inheemse compacte schema's, inclusief fractiele waarden, nul- en out-of-range input.
De ingebouwde helpers voor string, number, date en array gebruiken
Total.js breidt String, Number, Date en Array uit met helpers voor slugs, hashes, opmaak, parsen, groeperen en zoeken en biedt U.extend() en U.clone() voor objecten.
Recordactie-audit evenementen met een inheemse audit zink
Volg de auditoptie en uitdrukkelijke $.audit() oproepen zonder contact op te nemen met een logging service of het schrijven van gevoelige input naar een applicatie-log.
Draaien in debug- en releasemodus
De opties van Total.run() kiezen tussen debug- en releasemodus; lees de modus uit DEBUG en beperk routes tot één modus met @debug en @release.
De applicatie testen met de ingebouwde testrunner
Schrijf een test.js die de app start, tests registreert met Test.push(), resultaten controleert met Test.print() en eindigt met een code ongelijk aan nul wanneer er een mislukt.
Gebruik alle CPU-cores met de clustermodus
Begin meerdere werknemersprocessen achter één port met de clusteroptie van Total.run(), en weet wat er gedeeld is tussen hen en wat niet.
Laad een JavaScript-module vanaf een URL met IMPORT()
Download een bestand met JavaScript van een adres, bewaar het in de map tmp, laad het met require en gebruik wat het exporteert; de tweede aanroep downloadt het niet opnieuw.
Bouw een stroom van componenten met Flow.load() en voer hem uit met exec()
Beschrijf een FlowStream als componenten en de verbindingen ertussen, laad hem in de applicatie, stuur er een bericht doorheen en lees het antwoord, en wijzig de configuratie van een component terwijl hij draait.
Test een Flow-component afzonderlijk met Flow.test()
Laad één component in een eigen stroom, stuur hem een bericht vanuit de code en lees wat hij naar zijn uitgangen stuurt, zonder de hele stroom te bouwen.
Roep een Python-programma dat blijft draaien aan met PYPELINE()
Start een Python-script vanuit de applicatie, stuur het JSON-berichten via een socket en ontvang zijn antwoorden, waarbij het script opnieuw wordt gestart als het sterft.
Enums en string-format validatiegrens
Voer positieve en negatieve compacte schema-checks voor enums, Color, Base64, Zip, Icon, JSON en IP-formaat.
TotalAPI en Componentator servicegrenzen
Controleer de ingeschakelde TotalAPI-afdeling en Componentator-locale caches opnieuw zonder externe dienstverlening te doen.
QueryBuilder-activiteiten, filters en bestuurderscontract
Controleer inheemse DB- en NEWDB-opties, gekwalificeerde resultaten, fouten en filters zonder een bouwer te verwarren met een database-driver.
Compileren en uitvoeren van een native server component
Compileer vertrouwde Total.js-component HTML, creëer een voorbeeld, valideren van berichten, herstelt het en laat zijn middelen vrij.
Controller callbacks, handmatige toestemming en voorwaardelijke antwoorden
Uitvoeren van jsonstring, reageren, doen, succesvol maken, aanpassen en Last-Modified handelen.
Actie transportopties en uitdrukkelijke TMS publicatie
Test csrf, versleutelen, compressen en publiceren tegen echte HTTP en TMS in plaats van metadata verplicht gedrag.
Invalideerde release-mode statische caches met TOUCH
Blijf een tijdelijk statische bestand aanpassen en wijzigen, verwijder de cached-representatie en verwijder cached 404-inscripties.
OPENCLIENT RPC, evenementen en gedeelde verbindingen
Oefen OPENCLIENT met een lokale protocol fixtuur, inclusief initialisering, callback correlatie, timeout en logisch-client verwijderen.
Laden van FlowStream bestanden en uitvoeren van geïsoleerde werknemers
Voer hetzelfde vertrouwde FlowStream schema als een werknemer thread en een kinderproces, laden .flow bestanden en verwijderen van instanties.
Actie levenscyclus hooks, resultaat uitbreiding en administrator wachten
Exerciseer oninput, onoutput, extend, sa en su met geldig, ongeldig en mislukte acties.
Real SQL met native QueryBuilder en SQLite transacties
Registreer een beperkte SQLite-driver, uitvoeren van een parameterde CRUD en verifieer commit, beperken van falen en rollback tegen een bestand ondersteund database.
Load applicatiebronnen en vermijd runtime pakketverrassingen
Voer LOAD in een afzonderlijk proces en controleer NPMINSTALL opnieuw gebruik van een al beschikbare pakket zonder netwerktoegang.
Een echte lokale LDAP-directie zoeken
Zoek een geïsoleerde OpenLDAP-instantie en controleer het bindresultaat in totaal5 0.0.19.
Verpakkingsapplicaties als een Total.js-pakket
Creëer een lokale bundel, laad de definities via de framework startup loader en controleer de extractie in .src.
Uw eigen upload-bestand schoonmaken en query links bouwen
Controleer standaard upload cleanup, autoclear(valse), explicit clear en href query vervanging.