Total.js 5 (backend)
Route, azioni, schemi, database, WebSocket, viste e tutto ciò che gira sul server.
Validare un body JSON con un'azione
Definisci uno schema di input su un'azione e lascia che Total.js respinga le richieste non valide prima che il tuo codice venga eseguito.
Esporre azioni tramite un unico endpoint API
Dichiara endpoint ROUTE('API ...') così un client può chiamare molte azioni con POST {schema, data} su un'unica URL.
Leggere i parametri dell'URL in una route
Dichiara segmenti dinamici come {id} in una route e leggili da $.params.
Intercettare molte URL con una route jolly
Termina una route con * per corrispondere a tutto ciò che sta sotto un percorso e tieni route specifiche per le eccezioni.
Gestire ogni metodo HTTP
Dichiara route per GET, POST, PUT, PATCH e DELETE e leggi il metodo da $.method.
Limitare una route con i flag
Aggiungi @flag come @json, @xml o @upload così una route corrisponde solo alle richieste a cui è destinata.
Leggere la query string e il body della richiesta
Usa $.query per i parametri dell'URL e $.body per i dati JSON o di modulo in un handler di route.
Limitare la dimensione del payload e il timeout di una route
Aggiungi <1kb o <10s a una route per limitare la dimensione della richiesta o il tempo a disposizione dell'handler.
Dichiarare parametri di route tipizzati in un'azione
Usa l'opzione params di NEWACTION affinché Total.js validi i parametri dell'URL prima che il tuo codice venga eseguito.
Scegliere come rispondere
Invia JSON, HTML, testo semplice, XML, redirect, risposte vuote o dati binari da un handler di route.
Leggere gli header e lavorare con i cookie
Leggi gli header della richiesta da $.headers, leggi e scrivi cookie con $.cookie() e imposta header di risposta.
Ricevere upload di file
Accetta multipart/form-data con il flag @upload e leggi i file caricati da $.files.
Consentire richieste cross-origin con CORS
Chiama CORS() per consentire a un'origine, a più origini o a ogni origine di usare le tue route da un browser.
Renderizzare una vista senza scrivere un handler
Una route senza handler renderizza la vista che ha il nome della sua URL, o la vista che indichi.
Selezionare il tipo di input giusto per un'azione
Selezionare i tipi per le definizioni di input, parametri, query e output, comprese conversioni e valori rifiutati.
Validare la query string in un'azione
Dichiara query in NEWACTION per validare e convertire i parametri dell'URL e leggi i valori puliti da $.query.
Filtrare la risposta di un'azione con output
Dichiara output affinché escano dall'azione solo i campi elencati, ad esempio per non far mai trapelare un hash di password.
Richiedere un utente o un permesso in un'azione
Usa le opzioni user e permissions di NEWACTION così l'autorizzazione sta accanto all'azione e non in ogni route.
Proteggere le route con AUTH
Autentica ogni richiesta con AUTH() e limita le route a utenti autenticati o anonimi con i prefissi + e -.
Dichiarare la route dentro l'azione
Metti la route nell'opzione route di NEWACTION e tieni URL, validazione e codice in un unico posto.
Far accedere gli utenti con l'autenticazione a sessione integrata
Passa un oggetto di opzioni ad AUTH() per ottenere cookie di sessione firmati, un archivio di sessioni e il logout senza scrivere l'infrastruttura.
Chiamare un'azione dal tuo codice
Usa ACTION() per eseguire un'azione da un timer, un job o un'altra azione, con payload, query e utente propri.
Concatenare più azioni in una route
Elenca più azioni dopo --> per eseguirle in sequenza sullo stesso payload e indica quale risponde con (response).
Aggiungere un middleware a una route
Registra un middleware con MIDDLEWARE() e collegalo alle route con il flag #name.
Costruire una chat WebSocket
Dichiara una route SOCKET, ascolta i messaggi e trasmettili a tutti i client connessi.
Connettersi a un server WebSocket da Node
Usa WEBSOCKETCLIENT per aprire una connessione WebSocket dalla tua app, inviare messaggi e reagire alle risposte.
Disaccoppiare il codice con gli eventi
Emetti e ascolta eventi dell'applicazione con EMIT(), ON(), ONCE() e OFF() affinché i moduli non si chiamino direttamente.
Archiviare e leggere dati con il database NoSQL integrato
Inserisci e interroga documenti con NOSQL() ed esponili tramite azioni, senza installare alcun database.
Interrogare il database NoSQL
Filtra, ordina, impagina e proietta documenti con where, in, between, search, sort, take, skip e fields.
Aggiornare e rimuovere documenti NoSQL
Modifica documenti con update() e where(), eliminali con remove() e leggi quanti ne sono stati interessati.
Usare l'API DATA per cambiare database
DATA indirizza una tabella come database/tabella, così lo stesso codice di query funziona con il NoSQL integrato e con altri database.
Mettere valori in cache in memoria
Salva valori con CACHE.set() e una scadenza, leggili con CACHE.get() ed eliminali con remove() o reset().
Rendere persistenti piccole impostazioni con MEMORIZE
Tieni su disco un oggetto JSON che sopravvive ai riavvii, per contatori e impostazioni che non richiedono un database.
Generare id univoci e hash
Crea id con UID() e GUID() e hash con HASH(), e sappi quale usare dove.
Mettere in cache su disco risultati lenti con FILECACHE
Usa FILECACHE() per calcolare un risultato una volta e riutilizzarlo da un file per un periodo, anche dopo un riavvio.
Archiviare i file caricati con FILESTORAGE
Salva gli upload in un archivio di file gestito con file.fs() e rispedisci i file con $.filefs().
Renderizzare una vista con un layout
Renderizza una vista HTML con un modello, scorri i dati e passa valori al layout.
Usare condizioni ed escape nelle viste
Ramifica con @{if}, @{else} e @{fi} e scegli tra l'output con escape @{value} e l'HTML grezzo @{!value}.
Scorrere array e oggetti nelle viste
Ripeti il markup con @{foreach} per array e oggetti e usa l'indice dell'elemento corrente.
Includere viste e risorse
Riutilizza il markup con @{view()} e aggiungi script e stili con @{import()}.
Riempire sezioni del layout da una vista
Dichiara una sezione in una vista con @{section} e stampala nel layout con @{section('name')}, e scegli un altro layout per richiesta.
Aggiungere helper di vista e leggere la config nelle viste
Registra funzioni in DEF.helpers per chiamarle dalle viste e leggi i valori di config con @{'%key'}.
Convertire Markdown in HTML
Usa il prototipo String.markdown() per rendere testo Markdown in HTML, per contenuti salvati dagli utenti o in file.
Generare testo con i template Tangular
Usa Tangular.render() per riempire modelli di e-mail, documenti e messaggi con condizioni, cicli e helper.
Renderizza template da testo, file e URL con TEMPLATE
Usa TEMPLATE() per renderizzare un template Tangular che è un testo, un file della cartella dei template o un URL, con i propri helper e un modello predefinito.
Confronta due liste con DIFFARR: cosa aggiungere, aggiornare e rimuovere
Usa DIFFARR() per confrontare gli elementi salvati nel database con quelli di un modulo e ottenere quelli da aggiungere, aggiornare e rimuovere.
Query Builder: DB() e NEWDB() con il proprio driver di database
Costruisci domande con DB().find().where().sort() e lascia che un driver registrato con NEWDB() li esegue, mentre un driver registratore implementa operazioni di database supportate.
Configurare l'app con il file config
Tieni le impostazioni in un file config e leggile tramite CONF.
Cifrare e decifrare dati con una chiave
Trasforma oggetti in token opachi con ENCRYPT() e rileggili con DECRYPT(), per link firmati e token di breve durata.
Chiama servizi esterni con API() e i driver di NEWAPI()
Registra un driver per un servizio con NEWAPI() e chiamalo dalle azioni con API(name, schema, data), con lo stesso stile di callback, errore e promise del query builder.
Parla con i modelli linguistici con AIMODEL(), NEWAIMODEL() e AIPARSER()
Crea una richiesta di chat con AIMODEL(), lascia che un conducente registrato con NEWAIMODEL() la invii a un provider e leggi le risposte in streaming con AIPARSER().
Limitare i tentativi falliti con BLOCKED
Conta i tentativi per indirizzo IP con BLOCKED() e rispondi 429 una volta raggiunto il limite, per login e reimpostazioni di password.
I piccoli assistenti globali: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY e PROMISIFY
Utilizzare globali di applicazione, date, copie profonde, righe di consultazione e aiutanti promesse.
Raccogli errori con ErrorBuilder, registrali con ERROR() e conserva una traccia di audit con AUDIT()
Rispondi con più errori insieme usando ErrorBuilder, la risposta SUCCESS(), come ERROR() registra i fallimenti e come AUDIT() aggiunge a un file di log chi ha fatto cosa.
Ritarda il lavoro con setTimeout2() e clearTimeout2()
Usa setTimeout2() per eseguire una funzione una sola volta quando le chiamate smettono di arrivare, sostituendo il timer precedente con lo stesso id, e annullalo con clearTimeout2().
Token legati a un browser con ENCRYPTREQ() e DECRYPTREQ()
Cifra un valore insieme allo user agent (e facoltativamente all'indirizzo IP) della richiesta e rileggilo solo dallo stesso client.
Esegui il backup di una cartella con BACKUP() e RESTORE(), ed esegui comandi con SHELL()
Impacchetta una directory in un solo file e scompattala di nuovo con BACKUP() e RESTORE(), ed esegui un comando della shell nella cartella del progetto con SHELL().
Metti l'applicazione in manutenzione con PAUSESERVER()
Metti in pausa il server per nome in modo che ogni richiesta riceva una pagina 503, riprendilo e sappi che senza secondo argomento la chiamata alterna lo stato.
Regole di business come testo con NEWMACRO()
Compila piccole regole scritte in un linguaggio semplice (IF, ELSE, AND, OR, RETURN, chiamate a helper) in una funzione che esegui con un modello, così le regole possono vivere in un file o in un database.
Servire file statici dalla cartella public
I file nella directory public vengono serviti automaticamente, senza bisogno di una route.
Chiama un altro indirizzo con AJAX() dal server
Usa AJAX() per chiamare un indirizzo HTTP con un corpo JSON e ottenere la risposta già interpretata, come promise o con callback, e scopri cosa succede con gli errori e con XML.
Chiamare altre API HTTP con RESTBuilder
Esegui richieste GET e POST a un altro servizio, imposta header e timeout e leggi lo stato e la risposta interpretata.
Rilascia uno stream quando finisce con CLEANUP()
Usa CLEANUP() per distruggere uno stream appena è terminato o ha fallito, in modo che non restino aperti descrittori di file, con un callback o come promise.
Tradurre una vista in più lingue
Contrassegna i testi con @(...) nelle viste e fornisci le traduzioni in file di risorse scelti da LOCALIZE().
Eseguire codice con una pianificazione usando CRON
Registra una funzione con CRON() e una riga cron a cinque campi, e scopri quando avviene il controllo e come rimuovere un job.
Eseguire lavoro pesante in un thread o in un processo figlio
Usa NEWTHREAD() per avviare un thread worker, inviargli messaggi e leggere le risposte senza bloccare il processo principale.
Condividi pochi thread di lavoro con NEWTHREADPOOL()
Avvia un numero fisso di worker, prendine uno con pool.exec() quando c'è lavoro, restituiscilo con release() e lascia che gli altri lavori aspettino un worker libero.
Chiamare altri server con REQUEST e salvare file con DOWNLOAD
Usa REQUEST() per chiamate HTTP di basso livello con pieno controllo su metodo, header, query e corpo, e DOWNLOAD() per scaricare un file remoto su disco.
Inviare un'email da una vista
Configura SMTP nel file config, renderizza una vista come corpo del messaggio con MAIL() e invia HTML già pronto con HTMLMAIL().
Personalizzare le pagine 404 e 401
Registra gestori ROUTE('#404') e ROUTE('#401') per sostituire le pagine di errore integrate e attivali tu stesso con $.fallback().
Invia a te stesso un messaggio con LOGMAIL()
Invia un messaggio di testo semplice o JSON a un indirizzo senza vista, per log e avvisi, con le stesse impostazioni SMTP di MAIL().
Inviare file e stream al client
Servi un file dal disco con $.file(), imponi un nome di download, trasmetti contenuto generato con $.stream() e rispondi 404 quando il file manca.
Inoltrare richieste a un altro server
Usa PROXY() per associare un prefisso di URL a un server a monte, scegli come viene copiato il percorso e $.proxy() per inoltrare una singola rotta.
Pubblica un server locale tramite un tunnel con PROXYSERVER() e PROXYCLIENT()
Lascia che un server Total.js con indirizzo pubblico inoltri richieste a un programma che gira solo su una macchina privata, con un tunnel WebSocket aperto dal lato privato.
Proteggere moduli e richieste con i token CSRF
Crea un token con $.csrf(), invialo con la richiesta e verificalo in un middleware per rifiutare le richieste provenienti da altri siti.
Raggruppare le azioni in uno schema e riutilizzare le definizioni di input
Usa NEWSCHEMA() per dichiarare azioni correlate sotto un unico nome e condividi una definizione di input tra azioni con un file in jsonschemas/.
Costruire una pipeline di elaborazione con i transform
Registra più passaggi sotto un unico nome con NEWTRANSFORM() e fai passare un valore attraverso di essi in ordine con TRANSFORM().
Scambiare messaggi con il Total Messaging Service
Attiva l'endpoint WebSocket di TMS e lascia che client esterni ricevano messaggi pubblicati, inviino messaggi alla tua app e ne chiamino le funzioni.
Costruire una risorsa REST completa con le azioni
Dichiara le azioni query, read, insert, update, patch e remove sul database NoSQL, con validazione, un 404 per i record mancanti e rotte che associano ogni metodo HTTP.
Configurare una rotta WebSocket con flag, autenticazione e parametri
Scegli il tipo di messaggio con @text o @binary, richiedi un utente autenticato con il prefisso +, controlla un token CSRF con @csrf e leggi i parametri dell'URL nelle rotte SOCKET.
Minificare e unire CSS, JavaScript e HTML
I file statici e le risposte HTML vengono minificati automaticamente; usa MERGE() per servire più file come uno solo e le impostazioni $minify per disattivarlo.
Ridimensionare e convertire immagini
Elabora immagini con Image.load(), concatena operazioni di dimensione, ritaglio e formato, salva il risultato, misurane le dimensioni e servi miniature con $.image().
Verificare i limiti di schema numerico invece di assumere una costanza completa
Controlla Int, SmallInt, TinyInt e Number2 con schemi compatti nativi, tra cui valori frazionali, input zero e out-of-range.
Usare gli helper integrati per string, number, date e array
Total.js estende String, Number, Date e Array con helper per slug, hash, formattazione, parsing, raggruppamento e ricerca, e offre U.extend() e U.clone() per gli oggetti.
Registra eventi di controllo delle azioni con un sink di controllo nativo
Osserva l'opzione di controllo e le chiamate esplicite a $.audit() senza contattare un servizio di registrazione o scrivere input sensibili in un registro dell'applicazione.
Eseguire in modalità debug e release
Le opzioni di Total.run() scelgono tra modalità debug e release; leggi la modalità da DEBUG e limita le rotte a una modalità con @debug e @release.
Testare l'applicazione con il test runner integrato
Scrivi un test.js che avvia l'app, registra i test con Test.push(), controlla i risultati con Test.print() ed esce con un codice diverso da zero quando uno fallisce.
Utilizzare tutti i core CPU con il modo cluster
Inizia diversi processi lavoratori dietro un unico porto con l'opzione cluster di Total.run(), e sa cosa è condiviso tra loro e cosa non è.
Carica un modulo JavaScript da un URL con IMPORT()
Scarica un file JavaScript da un indirizzo, salvalo nella cartella tmp, caricalo con require e usa ciò che esporta; la seconda chiamata non lo scarica di nuovo.
Costruisci un flusso di componenti con Flow.load() ed eseguilo con exec()
Descrivi un FlowStream come componenti e le connessioni tra loro, caricalo nell'applicazione, invia un messaggio attraverso di esso e leggi la risposta, e cambia la configurazione di un componente mentre è in esecuzione.
Testa un componente Flow da solo con Flow.test()
Carica un componente in un flusso a sé, inviagli un messaggio dal codice e leggi ciò che invia alle sue uscite, senza costruire l'intero flusso.
Chiama un programma Python che resta in esecuzione con PYPELINE()
Avvia uno script Python dall'applicazione, inviagli messaggi JSON tramite un socket e ricevi le sue risposte, con lo script riavviato se muore.
Enum e limiti di validazione di string-format
Eseguire controlli di schema compatti positivi e negativi per i formati enum, Color, Base64, Zip, Icon, JSON e IP.
I limiti di servizio di TotalAPI e Componentator
Verificare il ramo TotalAPI disabilitato e Componentator locale-cache riutilizzo senza effettuare chiamate di servizio esterne.
Operazioni di QueryBuilder, filtri e contratti di driver
Verificare le opzioni DB e NEWDB, i risultati di quoed, gli errori e le forme di filtro senza confondere un costruttore con un driver di database.
Compilare e eseguire un componente del server nativo
Compilare il componente di fiducia Total.js HTML, creare un esempio, valutare i messaggi, riconfigurarlo e rilasciare le sue risorse.
Controller callbacks, autorizzazione manuale e risposte condizionali
Eseguire jsonstring, rispondere, fare, avere successo, autorizzare, personalizzare e trattare con ultima modifica.
Opzioni di trasporto di azione e pubblicazione TMS esplicita
Test CSRF, crittografia, compressione e pubblicazione contro HTTP reale e TMS piuttosto che assumere i metadati esercitano il comportamento.
Invalidare i cache statici in modalità di rilascio con Touch
Servire e modificare un file statico temporaneo, eliminare la sua rappresentazione cache e rimuovere le entrate 404.
OPENCLIENT RPC, eventi e connessioni condivise
Esercitare OPENCLIENT con una fissura di protocollo locale, tra cui inizializzazione, correlazione callback, timout e rimozione logico-cliente.
Caricare i file FlowStream e eseguire lavoratori isolati
Eseguire lo stesso schema di fiducia FlowStream come un filo lavoratore e un processo infantile, caricare i file .flow e rimuovere gli esempi.
L'azione del ciclo di vita, l'estensione dei risultati e gli amministratori
Esercitare on-input, on-out, estende, sa e su con azioni valide, invalide e fallite.
SQL reale con le transazioni native di QueryBuilder e SQLite
Registrare un driver limitato SQLite, eseguire CRUD e verificare il compromesso, restringere l'insufficienza e rallentare contro una base di dati supportata da file.
Caricare le risorse dell'applicazione e evitare le sorprese del pacchetto di runtime
Eseguire LOAD in un processo separato e verificare NPMINSTALL riutilizzo di un pacchetto già disponibile senza accesso alla rete.
Interroga una directory LDAP locale reale
Interroga un'istanza OpenLDAP isolata e verifica il risultato del collegamento in totale5 0.0.19.
Il pacchetto di applicazione file come un pacchetti Total.js
Crea un pacchetto locale, carica le sue definizioni attraverso il caricabatterie di startup e verifica l'estrazione in .src.
Il proprio file caricato pulito e costruire link di query
Verificare la pulizia predefinita, autoclear(false), chiaro esplicitamente e href sostituzione della domanda.