Total.js 5 (backend)
Trasy, akcje, schematy, bazy danych, WebSocket, widoki i wszystko, co działa na serwerze.
Walidacja body JSON przez akcję
Zdefiniuj schemat wejścia w akcji i pozwól Total.js odrzucać nieprawidłowe żądania, zanim wykona się Twój kod.
Udostępnianie akcji przez jeden endpoint API
Zadeklaruj endpointy ROUTE('API ...'), aby klient mógł wywoływać wiele akcji przez POST {schema, data} na jednym URL.
Czytanie parametrów URL w trasie
Deklaruj dynamiczne segmenty, takie jak {id}, w trasie i czytaj je z $.params.
Przechwytywanie wielu URL trasą z wildcardem
Zakończ trasę znakiem *, aby pasować do wszystkiego pod ścieżką, i zachowaj wyspecyfikowane trasy dla wyjątków.
Obsługa każdej metody HTTP
Deklaruj trasy dla GET, POST, PUT, PATCH i DELETE i czytaj metodę z $.method.
Ograniczanie trasy flagami
Dodaj @flagi, takie jak @json, @xml lub @upload, aby trasa pasowała tylko do żądań, dla których jest przeznaczona.
Czytanie query string i body żądania
Użyj $.query dla parametrów URL i $.body dla danych JSON lub formularza w handlerze trasy.
Ograniczanie rozmiaru payloadu i timeoutu trasy
Dopisz <1kb lub <10s do trasy, aby ograniczyć rozmiar żądania lub czas, jaki może zająć handler.
Deklarowanie typowanych parametrów trasy w akcji
Użyj opcji params w NEWACTION, aby Total.js walidował parametry URL, zanim wykona się Twój kod.
Wybór sposobu odpowiedzi
Wysyłaj JSON, HTML, zwykły tekst, XML, przekierowania, puste odpowiedzi lub dane binarne z handlera trasy.
Czytanie nagłówków i praca z ciasteczkami
Czytaj nagłówki żądania z $.headers, czytaj i zapisuj ciasteczka przez $.cookie() oraz ustawiaj nagłówki odpowiedzi.
Odbieranie wgrywanych plików
Przyjmuj multipart/form-data z flagą @upload i czytaj wgrane pliki z $.files.
Zezwalanie na żądania między originami przez CORS
Wywołaj CORS(), aby pozwolić jednemu originowi, kilku lub wszystkim korzystać z Twoich tras z przeglądarki.
Renderowanie widoku bez pisania handlera
Trasa bez handlera renderuje widok nazwany jak jej URL lub widok, który wskażesz.
Wybierz właściwy typ wejścia dla akcji
Wybierz typy dla definicji wejścia, parametrów, zapytania i wyjścia, w tym konwersje i odrzucone wartości.
Walidacja query string w akcji
Zadeklaruj query w NEWACTION, aby walidować i konwertować parametry URL, i czytaj oczyszczone wartości z $.query.
Filtrowanie odpowiedzi akcji przez output
Zadeklaruj output, aby z akcji wychodziły tylko wymienione pola, na przykład by nigdy nie ujawnić hasha hasła.
Wymaganie użytkownika lub uprawnienia w akcji
Użyj opcji user i permissions w NEWACTION, aby autoryzacja była przy akcji, a nie w każdej trasie.
Ochrona tras przez AUTH
Uwierzytelniaj każde żądanie przez AUTH() i ograniczaj trasy do zalogowanych lub anonimowych użytkowników prefiksami + i -.
Deklarowanie trasy wewnątrz akcji
Umieść trasę w opcji route w NEWACTION i trzymaj URL, walidację i kod w jednym miejscu.
Logowanie użytkowników wbudowanym uwierzytelnianiem sesyjnym
Przekaż obiekt opcji do AUTH(), aby dostać podpisane ciasteczka sesji, magazyn sesji i wylogowanie bez pisania infrastruktury.
Wywoływanie akcji z własnego kodu
Użyj ACTION(), aby uruchomić akcję z timera, zadania lub innej akcji, z własnym payloadem, query i użytkownikiem.
Łączenie wielu akcji w jednej trasie
Wymień kilka akcji po --> aby wykonać je kolejno na tym samym payloadzie i oznacz, która odpowiada przez (response).
Dodawanie middleware do trasy
Zarejestruj middleware przez MIDDLEWARE() i podłącz go do tras flagą #name.
Budowa czatu WebSocket
Zadeklaruj trasę SOCKET, nasłuchuj wiadomości i rozsyłaj je do wszystkich połączonych klientów.
Łączenie z serwerem WebSocket z poziomu Node
Użyj WEBSOCKETCLIENT, aby otworzyć połączenie WebSocket z Twojej aplikacji, wysyłać wiadomości i reagować na odpowiedzi.
Rozdzielanie kodu za pomocą zdarzeń
Emituj i nasłuchuj zdarzeń aplikacji przez EMIT(), ON(), ONCE() i OFF(), aby moduły nie wywoływały się bezpośrednio.
Przechowywanie i odczyt danych we wbudowanej bazie NoSQL
Wstawiaj i zapytuj dokumenty przez NOSQL() i udostępniaj je przez akcje, bez instalowania żadnej bazy danych.
Zapytania do bazy NoSQL
Filtruj, sortuj, stronicuj i rzutuj dokumenty przez where, in, between, search, sort, take, skip i fields.
Aktualizacja i usuwanie dokumentów NoSQL
Zmieniaj dokumenty przez update() i where(), usuwaj je przez remove() i czytaj, ile zostało dotkniętych.
Przełączanie baz danych przez API DATA
DATA adresuje tabelę jako baza/tabela, więc ten sam kod zapytań działa z wbudowanym NoSQL i z innymi bazami.
Buforowanie wartości w pamięci
Zapisuj wartości przez CACHE.set() z czasem wygaśnięcia, czytaj je przez CACHE.get() i usuwaj przez remove() lub reset().
Trwałe zapisywanie małych ustawień przez MEMORIZE
Trzymaj na dysku obiekt JSON, który przetrwa restart, dla liczników i ustawień niewymagających bazy danych.
Generowanie unikalnych id i hashy
Twórz id przez UID() i GUID() oraz hashe przez HASH() i wiedz, którego użyć gdzie.
Buforowanie wolnych wyników na dysku przez FILECACHE
Użyj FILECACHE(), aby obliczyć wynik raz i używać go z pliku przez pewien czas, nawet po restarcie.
Przechowywanie wgranych plików przez FILESTORAGE
Zapisuj wgrane pliki w zarządzanym magazynie plików przez file.fs() i odsyłaj je przez $.filefs().
Renderowanie widoku z layoutem
Renderuj widok HTML z modelem, iteruj po danych i przekazuj wartości do layoutu.
Warunki i escapowanie w widokach
Rozgałęziaj przez @{if}, @{else} i @{fi} oraz wybieraj między wyjściem z escapowaniem @{value} a surowym HTML @{!value}.
Iterowanie po tablicach i obiektach w widokach
Powtarzaj znaczniki przez @{foreach} dla tablic i obiektów i używaj indeksu bieżącego elementu.
Dołączanie widoków i zasobów
Używaj ponownie znaczników przez @{view()} i dodawaj skrypty i style przez @{import()}.
Wypełnianie sekcji layoutu z widoku
Zadeklaruj sekcję w widoku przez @{section} i wypisz ją w layoutcie przez @{section('name')}, a dla żądania wybierz inny layout.
Dodawanie helperów widoków i czytanie konfiguracji w widokach
Rejestruj funkcje w DEF.helpers, aby wywoływać je z widoków, i czytaj wartości konfiguracji przez @{'%key'}.
Konwersja Markdown na HTML
Użyj prototypu String.markdown(), aby renderować tekst Markdown do HTML, dla treści zapisywanych przez użytkowników lub w plikach.
Generowanie tekstu szablonami Tangular
Użyj Tangular.render(), aby wypełniać szablony e-maili, dokumentów i wiadomości z warunkami, pętlami i helperami.
Renderuj szablony z tekstu, plików i adresów URL przez TEMPLATE
Użyj TEMPLATE(), aby wyrenderować szablon Tangular, który jest tekstem, plikiem z folderu szablonów lub adresem URL, z własnymi helperami i domyślnym modelem.
Porównaj dwie listy za pomocą DIFFARR: co dodać, zaktualizować i usunąć
Użyj DIFFARR(), aby porównać elementy zapisane w bazie danych z elementami formularza i uzyskać te, które trzeba dodać, zaktualizować i usunąć.
Twórca pytań: DB() i NEWDB() z własnym sterownikiem danych
Budować zapytania z DB().najdź().sort() i pozwól, aby kierowca zarejestrowany z NEWDB() je uruchomił, podczas gdy rejestrowany kierowca realizuje operacje bazy danych.
Konfigurowanie aplikacji plikiem config
Trzymaj ustawienia w pliku config i czytaj je przez CONF.
Szyfrowanie i odszyfrowywanie danych kluczem
Zamieniaj obiekty w nieprzejrzyste tokeny przez ENCRYPT() i odczytuj je przez DECRYPT(), dla podpisanych linków i krótkotrwałych tokenów.
Wywołuj usługi zewnętrzne przez API() i sterowniki NEWAPI()
Zarejestruj sterownik usługi przez NEWAPI() i wywołuj go z akcji przez API(name, schema, data), w tym samym stylu callbacku, błędu i obietnicy co query builder.
Rozmawiaj z modelami językowymi z AIMODEL(), NEWAIMODel() i AIPARSER()
Zbuduj prośbę o rozmowę z AIMODEL(), pozwól kierowcy zarejestrowanemu w NEWAIMODL() wysłać ją do dostawcy i przeczytaj transmisje odpowiedzi z AIPARSER().
Ograniczanie nieudanych prób przez BLOCKED
Licz próby na adres IP przez BLOCKED() i odpowiadaj 429 po osiągnięciu limitu, dla logowań i resetów haseł.
Małymi globalnymi pomocnikami: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY i PROMISIFY
Wykorzystaj globalne aplikacje, daty, głębokie kopie, wiersze zapytania i pomocnicy obiecani.
Zbieraj błędy za pomocą ErrorBuilder, rejestruj je przez ERROR() i prowadź ślad audytu przez AUDIT()
Odpowiadaj kilkoma błędami naraz za pomocą ErrorBuilder, odpowiedzi SUCCESS(), dowiedz się, jak ERROR() zapisuje błędy i jak AUDIT() dopisuje do pliku logu, kto co zrobił.
Opóźniaj pracę za pomocą setTimeout2() i clearTimeout2()
Użyj setTimeout2(), aby wykonać funkcję jeden raz po ustaniu wywołań, zastępując poprzedni timer o tym samym id, i anuluj go przez clearTimeout2().
Tokeny związane z przeglądarką dzięki ENCRYPTREQ() i DECRYPTREQ()
Zaszyfruj wartość razem z user agentem (i opcjonalnie adresem IP) żądania i odczytaj ją z powrotem tylko od tego samego klienta.
Rób kopię folderu przez BACKUP() i RESTORE() oraz uruchamiaj polecenia przez SHELL()
Spakuj katalog do jednego pliku i rozpakuj go ponownie za pomocą BACKUP() i RESTORE(), a w folderze projektu uruchom polecenie powłoki przez SHELL().
Przełącz aplikację w tryb konserwacji przez PAUSESERVER()
Wstrzymaj serwer po nazwie, aby każde żądanie dostawało stronę 503, wznów go i pamiętaj, że bez drugiego argumentu wywołanie przełącza stan.
Reguły biznesowe jako tekst przez NEWMACRO()
Skompiluj małe reguły napisane w prostym języku (IF, ELSE, AND, OR, RETURN, wywołania helperów) do funkcji uruchamianej z modelem, tak aby reguły mogły żyć w pliku lub w bazie danych.
Serwowanie plików statycznych z folderu public
Pliki w katalogu public są serwowane automatycznie, bez potrzeby trasy.
Wywołaj inny adres przez AJAX() z serwera
Użyj AJAX(), aby wywołać adres HTTP z ciałem JSON i dostać sparsowaną odpowiedź, jako obietnicę lub z callbackiem, oraz dowiedz się, co dzieje się z błędami i XML.
Wywoływanie innych API HTTP przez RESTBuilder
Wysyłaj żądania GET i POST do innej usługi, ustawiaj nagłówki i timeout oraz czytaj status i sparsowaną odpowiedź.
Zwolnij strumień po jego zakończeniu za pomocą CLEANUP()
Użyj CLEANUP(), aby zniszczyć strumień zaraz po jego zakończeniu lub błędzie, tak aby nie zostały otwarte uchwyty plików, z callbackiem lub jako obietnicę.
Tłumaczenie widoku na kilka języków
Oznacz teksty w widokach przez @(...) i dostarcz tłumaczenia w plikach zasobów wybieranych przez LOCALIZE().
Uruchamiaj kod według harmonogramu za pomocą CRON
Zarejestruj funkcję przez CRON() i pięciopolową linię cron oraz dowiedz się, kiedy działa sprawdzanie i jak usunąć zadanie.
Wykonuj ciężką pracę w wątku lub procesie potomnym
Użyj NEWTHREAD(), aby uruchomić wątek worker, wysyłać mu wiadomości i czytać odpowiedzi bez blokowania procesu głównego.
Współdziel kilka wątków roboczych przez NEWTHREADPOOL()
Uruchom stałą liczbę workerów, pożycz jednego przez pool.exec(), gdy jest praca, oddaj go przez release() i pozwól innym zadaniom czekać na wolnego workera.
Wywołuj inne serwery przez REQUEST i zapisuj pliki przez DOWNLOAD
Użyj REQUEST() do niskopoziomowych wywołań HTTP z pełną kontrolą nad metodą, nagłówkami, query i ciałem oraz DOWNLOAD(), aby strumieniować zdalny plik na dysk.
Wysyłanie e-maila z widoku
Skonfiguruj SMTP w pliku config, wyrenderuj widok jako treść wiadomości przez MAIL() i wyślij gotowy HTML przez HTMLMAIL().
Dostosuj strony 404 i 401
Zarejestruj handlery ROUTE('#404') i ROUTE('#401'), aby zastąpić wbudowane strony błędów, i wywołuj je sam przez $.fallback().
Wyślij sobie wiadomość przez LOGMAIL()
Wyślij zwykły tekst lub JSON na adres bez widoku, do logów i alertów, przez te same ustawienia SMTP co MAIL().
Wysyłaj pliki i strumienie do klienta
Serwuj plik z dysku przez $.file(), wymuś nazwę pobierania, wysyłaj wygenerowaną treść przez $.stream() i odpowiadaj 404, gdy pliku brakuje.
Przekazuj żądania do innego serwera
Użyj PROXY(), aby przypisać prefiks URL do serwera docelowego, wybierz sposób kopiowania ścieżki oraz $.proxy(), aby przekazać pojedynczą trasę.
Opublikuj lokalny serwer przez tunel za pomocą PROXYSERVER() i PROXYCLIENT()
Pozwól serwerowi Total.js z publicznym adresem przekazywać żądania do programu, który działa tylko na prywatnej maszynie, przez tunel WebSocket otwierany przez stronę prywatną.
Chroń formularze i żądania tokenami CSRF
Utwórz token przez $.csrf(), wyślij go z żądaniem i zweryfikuj w middleware, aby odrzucać żądania z innych witryn.
Grupuj akcje w schemacie i używaj ponownie definicji inputu
Użyj NEWSCHEMA(), aby zadeklarować powiązane akcje pod jedną nazwą, i współdziel definicję inputu między akcjami za pomocą pliku w jsonschemas/.
Zbuduj potok przetwarzania z użyciem transformów
Zarejestruj kilka kroków pod jedną nazwą przez NEWTRANSFORM() i przepuść wartość przez nie po kolei przez TRANSFORM().
Wymiana komunikatów przez Total Messaging Service
Włącz punkt końcowy WebSocket TMS i pozwól zewnętrznym klientom odbierać publikowane komunikaty, wysyłać komunikaty do aplikacji i wywoływać jej funkcje.
Zbuduj kompletny zasób REST z użyciem akcji
Zadeklaruj akcje query, read, insert, update, patch i remove nad bazą NoSQL, z walidacją, kodem 404 dla brakujących rekordów i trasami przypisującymi każdą metodę HTTP.
Skonfiguruj trasę WebSocket z flagami, uwierzytelnianiem i parametrami
Wybierz typ wiadomości przez @text lub @binary, wymagaj zalogowanego użytkownika prefiksem +, sprawdzaj token CSRF przez @csrf i czytaj parametry URL w trasach SOCKET.
Minifikuj i łącz CSS, JavaScript i HTML
Pliki statyczne i odpowiedzi HTML są minifikowane automatycznie; użyj MERGE(), aby serwować kilka plików jako jeden, oraz ustawień $minify, aby to wyłączyć.
Zmiana rozmiaru i konwersja obrazów
Przetwarzaj obrazy przez Image.load(), łącz operacje rozmiaru, przycinania i formatu, zapisz wynik, zmierz jego rozmiar i serwuj miniatury przez $.image().
Sprawdź granice schematu numerycznego zamiast przyjmować całą przymusu
Sprawdź Int, SmallInt, TinyInt i Number2 z native compact schemas, w tym wartości frakcyjne, zero i out-of-range wpisy.
Korzystaj z wbudowanych helperów dla string, number, date i array
Total.js rozszerza String, Number, Date i Array o helpery do slugów, hashy, formatowania, parsowania, grupowania i wyszukiwania oraz oferuje U.extend() i U.clone() dla obiektów.
Rejestracja wydarzeń audytu z native audit sink
Obserwuj opcję audytu i wyraźnie zadzwoń $.audit() bez kontaktu z usługą logowania lub pisząc wrażliwy wpis do dziennika aplikacji.
Uruchamianie w trybie debug i release
Opcje Total.run() wybierają tryb debug lub release; odczytuj tryb z DEBUG i ograniczaj trasy do jednego trybu przez @debug i @release.
Testuj aplikację wbudowanym uruchamiaczem testów
Napisz test.js, który uruchamia aplikację, rejestruje testy przez Test.push(), sprawdza wyniki przez Test.print() i kończy z kodem różnym od zera, gdy któryś zawiedzie.
Wykorzystaj wszystkie kolory CPU w trybie klastrowym
Rozpocznij kilka procesów pracowniczych za jednym portem z opcją klastru Total.run(), i dowiedzieć się, co jest dzielone między nimi i co nie.
Załaduj moduł JavaScript z adresu URL przez IMPORT()
Pobierz plik z JavaScriptem z adresu, zapisz go w folderze tmp, załaduj przez require i użyj tego, co eksportuje; drugie wywołanie nie pobiera go ponownie.
Zbuduj przepływ komponentów przez Flow.load() i uruchom go przez exec()
Opisz FlowStream jako komponenty i połączenia między nimi, załaduj go w aplikacji, wyślij przez niego wiadomość i odczytaj odpowiedź oraz zmień konfigurację komponentu w trakcie działania.
Przetestuj komponent Flow osobno przez Flow.test()
Załaduj jeden komponent we własnym przepływie, wyślij mu wiadomość z kodu i odczytaj, co wysyła na swoje wyjścia, bez budowania całego przepływu.
Wywołaj działający program Pythona przez PYPELINE()
Uruchom skrypt Pythona z aplikacji, wysyłaj mu wiadomości JSON przez gniazdo i odbieraj jego odpowiedzi; skrypt jest restartowany, jeśli padnie.
Enums i granice weryfikacji formatu strumienia
Sprawdzanie pozytywnych i negatywnych kontrol kompaktowych schematów dla formatów enum, Color, Base64, Zip, Icon, JSON i IP.
TotalAPI i granice usług Componentator
Sprawdź uszkodzoną gałęzię TotalAPI i lokalne przesyłki Componentator bez wykonywania połączeń zewnętrznych.
Operacje QueryBuilder, filtry i kontrakt kierowcy
Sprawdź opcje DB i NEWDB, wyniki, błędy i formy filtra bez mylącej budowla z sterownikiem bazy danych.
Kompilacja i uruchomienie elementu serwera
Kompiluj zaufany składnik Total.js HTML, tworz przykład, weryfikuj wiadomości, przekonfigurować je i uwalniać ich zasoby.
Kontrola zwrotów telefonicznych, autoryzacja ręczna i odpowiedzi warunkowe
Wykonywanie jsonstring, odpowiedzi, wykonane, udane, upoważnione, dostosowane i ostatnio zmodyfikowane obsługi.
Opcje transportu działania i wyraźna publikacja TMS
Testowanie csrf, szyfrowanie, kompresja i publikacja przeciwko rzeczywistym HTTP i TMS zamiast przyjmowania metadanych wymaga zachowania.
Nieprawidłowe cache statyczne w trybie uwalniania
Usługiwanie i modyfikacja tymczasowego statycznego pliku, usuwanie jego ukrytej reprezentacji i usunięcie ukrytego 404 wpisów.
OPENCLIENT RPC, wydarzenia i udostępnione połączenia
Ćwiczyć OPENCLIENT z lokalną ustawieniem protokołu, w tym inicjalizacją, korelacją zwrotną, terminowaniem i usunięciem logicznym klienta.
Pobierz pliki FlowStream i wykonać izolowanych pracowników
Sprawdzaj ten sam zaufany schemat FlowStream jako czynnik i proces dziecięcy, pobierz pliki .flow i usunąć przypadki.
Akcja cyklu życia, rozszerzenie wyników i administrator strażników
Ćwiczenie oninput, onoutput, extend, sa i su z ważnymi, nieważnymi i nieudanych działań.
Prawdziwe transakcje SQL z native QueryBuilder i SQLite
Zarejestruj ograniczony sterownik SQLite, uruchom parametryzowany CRUD i weryfikuj zobowiązania, ogranicza błędy i odwraca się wobec bazy danych obsługiwanej plikami.
Pobierz zasoby aplikacji i unikać niespodzianek w pakiecie runtime
Przeprowadź LOAD w odrębnym procesie i sprawdź ponowne wykorzystanie już dostępnego pakietu NPMINSTALL bez dostępu do sieci.
Zapytaj o prawdziwy lokalny adres LDAP
Wyszukaj izolowaną instancję OpenLDAP i sprawdź wynik wiązania w łącznej liczbie 5 0,019.
Pakiet aplikacji jako pudełko Total.js
Stwórz lokalny pakiet, naładuj jego definicje za pośrednictwem ładowarki startupowej ram i sprawdź ekstrakcję do .src.
Wyślij własny plik i zbudować linki do zapytania
Sprawdź podstępne przesyłanie czyszczenia, autoklary (fałszywe), wyraźnie jasne i href zastępowanie zapytania.