Total.js 5 (backend)
Маршрути, действия, схеми, бази данни, WebSocket, изгледи и всичко, което се изпълнява на сървъра.
Валидиране на JSON body с действие
Определете входна схема на действие и оставете Total.js да отхвърля невалидните заявки, преди да се изпълни вашият код.
Предоставяне на действия през една API крайна точка
Декларирайте крайни точки ROUTE('API ...'), за да може клиент да извиква много действия с POST {schema, data} на един URL адрес.
Четене на параметри на URL адреса в маршрут
Декларирайте динамични сегменти като {id} в маршрут и ги четете от $.params.
Улавяне на много URL адреси с маршрут със заместващ знак
Завършете маршрут със *, за да съвпада с всичко под даден път, и запазете конкретни маршрути за изключенията.
Обработка на всеки HTTP метод
Декларирайте маршрути за GET, POST, PUT, PATCH и DELETE и четете метода от $.method.
Ограничаване на маршрут с флагове
Добавяйте @флагове като @json, @xml или @upload, за да съвпада маршрутът само със заявките, за които е предназначен.
Четене на query string и body на заявката
Използвайте $.query за параметрите на URL адреса и $.body за JSON или данни от форма в handler на маршрут.
Ограничаване на размера на payload и timeout на маршрут
Добавете <1kb или <10s към маршрут, за да ограничите размера на заявката или времето, което може да отнеме handler.
Деклариране на типизирани параметри на маршрута в действие
Използвайте опцията params на NEWACTION, за да валидира Total.js параметрите на URL адреса, преди да се изпълни вашият код.
Избор на начин за отговор
Изпращайте JSON, HTML, обикновен текст, XML, пренасочвания, празни отговори или двоични данни от handler на маршрут.
Четене на хедъри и работа с бисквитки
Четете хедърите на заявката от $.headers, четете и записвайте бисквитки с $.cookie() и задавайте хедъри на отговора.
Получаване на качени файлове
Приемайте multipart/form-data с флага @upload и четете качените файлове от $.files.
Разрешаване на заявки от други origin със CORS
Извикайте CORS(), за да позволите на един origin, на няколко origin или на всеки origin да използва вашите маршрути от браузър.
Изобразяване на изглед без да пишете handler
Маршрут без handler изобразява изгледа, наименуван по своя URL адрес, или изгледа, който посочите.
Изберете правилния тип вход за действие
Изберете типове за вход, парами, заявки и дефиниции за изход, включително конверсии и отхвърлени стойности.
Валидиране на query string в действие
Декларирайте query в NEWACTION, за да валидирате и преобразувате параметрите на URL адреса, и четете изчистените стойности от $.query.
Филтриране на отговора на действие с output
Декларирайте output, за да напускат действието само изброените полета, например за да не изтече никога хешът на парола.
Изискване на потребител или право в действие
Използвайте опциите user и permissions на NEWACTION, за да стои авторизацията до действието, а не във всеки маршрут.
Защита на маршрути с AUTH
Удостоверявайте всяка заявка с AUTH() и ограничавайте маршрутите до влезли в системата или анонимни потребители с префиксите + и -.
Деклариране на маршрута вътре в действието
Поставете маршрута в опцията route на NEWACTION и дръжте URL адреса, валидирането и кода на едно място.
Влизане на потребители с вграденото удостоверяване със сесии
Подайте обект с опции на AUTH(), за да получите подписани бисквитки на сесията, хранилище за сесии и изход без да пишете инфраструктурата.
Извикване на действие от собствения ви код
Използвайте ACTION(), за да изпълните действие от таймер, задача или друго действие, със собствен payload, query и потребител.
Свързване на няколко действия в един маршрут
Изброете няколко действия след --> за да се изпълняват последователно върху един и същ payload, и отбележете с (response) кое от тях отговаря.
Добавяне на middleware към маршрут
Регистрирайте middleware с MIDDLEWARE() и го прикрепете към маршрути с флага #name.
Изграждане на чат с WebSocket
Декларирайте маршрут SOCKET, слушайте съобщения и ги излъчвайте до всички свързани клиенти.
Свързване към WebSocket сървър от Node
Използвайте WEBSOCKETCLIENT, за да отворите WebSocket връзка от вашето приложение, да изпращате съобщения и да реагирате на отговорите.
Разделяне на кода със събития
Излъчвайте и слушайте събития на приложението с EMIT(), ON(), ONCE() и OFF(), за да не се извикват модулите директно един друг.
Съхранение и четене на данни с вградената NoSQL база данни
Вмъквайте и заявявайте документи с NOSQL() и ги предоставяйте чрез действия, без да инсталирате база данни.
Заявки към NoSQL базата данни
Филтрирайте, сортирайте, страницирайте и проектирайте документи с where, in, between, search, sort, take, skip и fields.
Обновяване и премахване на NoSQL документи
Променяйте документи с update() и where(), изтривайте ги с remove() и четете колко са засегнати.
Използване на DATA API за смяна на база данни
DATA адресира таблица като база/таблица, така че един и същ код за заявки работи с вградения NoSQL и с други бази данни.
Кеширане на стойности в паметта
Запазвайте стойности с CACHE.set() и срок на валидност, четете ги с CACHE.get() и изчиствайте ги с remove() или reset().
Запазване на малки настройки с MEMORIZE
Дръжте на диска JSON обект, който оцелява при рестарти, за броячи и настройки, които не се нуждаят от база данни.
Генериране на уникални id и хешове
Създавайте id с UID() и GUID() и хешове с HASH() и знайте кое къде да използвате.
Кеширане на бавни резултати на диска с FILECACHE
Използвайте FILECACHE(), за да изчислите резултат веднъж и да го използвате повторно от файл за известно време, дори след рестарт.
Съхранение на качени файлове с FILESTORAGE
Запазвайте качените файлове в управлявано файлово хранилище с file.fs() и ги връщайте с $.filefs().
Изобразяване на изглед с layout
Изобразявайте HTML изглед с модел, обхождайте данни и подавайте стойности на layout.
Използване на условия и екраниране в изгледи
Разклонявайте с @{if}, @{else} и @{fi} и избирайте между екраниран изход @{value} и суров HTML @{!value}.
Обхождане на масиви и обекти в изгледи
Повтаряйте разметка с @{foreach} за масиви и обекти и използвайте индекса на текущия елемент.
Включване на изгледи и ресурси
Използвайте повторно разметка с @{view()} и добавяйте скриптове и стилове с @{import()}.
Попълване на секции на layout от изглед
Декларирайте секция в изглед с @{section} и я изведете в layout с @{section('name')}, и избирайте друг layout за заявка.
Добавяне на helper функции в изгледи и четене на config в изгледи
Регистрирайте функции в DEF.helpers, за да ги извиквате от изгледите, и четете стойности от config с @{'%key'}.
Преобразуване на Markdown в HTML
Използвайте прототипа String.markdown(), за да превръщате Markdown текст в HTML, за съдържание, записано от потребители или във файлове.
Генериране на текст с Tangular шаблони
Използвайте Tangular.render(), за да попълвате шаблони за имейли, документи и съобщения с условия, цикли и helper функции.
Рендирайте шаблони от текст, файлове и URL със TEMPLATE
Използвайте TEMPLATE(), за да рендирате Tangular шаблон, който е текст, файл от папката с шаблони или URL, със собствени помощници и модел по подразбиране.
Сравнете два списъка с DIFFARR: какво да се добави, обнови и премахне
Използвайте DIFFARR(), за да сравните елементите, запазени в базата данни, с тези на формуляр и да получите тези, които трябва да се добавят, обновят и премахнат.
Създател на търсене: DB() и NEWDB() с вашия собствена база данни драйвер
Изградете запитвания с DB().find().where().sort() и позволете на регистриран шофьор с NEWDB() да ги изпълнява, докато регистриран драйвер изпълнява поддържани операции на базата данни.
Конфигуриране на приложението с файла config
Дръжте настройките във файл config и ги четете през CONF.
Криптиране и декриптиране на данни с ключ
Превръщайте обекти в непрозрачни токени с ENCRYPT() и ги четете обратно с DECRYPT(), за подписани връзки и краткотрайни токени.
Извиквайте външни услуги с API() и драйверите на NEWAPI()
Регистрирайте драйвер за услуга с NEWAPI() и го извиквайте от действията с API(name, schema, data), със същия стил на callback, грешка и promise като query builder.
Говорете за езикови модели с AIMODEL(), NEWAIMODELL() и AIPARSER()
Създайте искане за чат с AIMODEL(), нека шофьорът, регистриран с NEWAIMODELL(), го изпрати на доставчик и прочетете отговорите, предавани с AIPARSER().
Ограничаване на неуспешни опити с BLOCKED
Броете опитите по IP адрес с BLOCKED() и отговаряйте с 429 при достигане на лимита, за влизания и нулиране на пароли.
Малките глобални помощници: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY и PROMISIFY
Използвайте глобални приложения, дати, дълбоки копия, справки и обещания помощници.
Събирайте грешки с ErrorBuilder, записвайте ги с ERROR() и водете одитна следа с AUDIT()
Отговаряйте с няколко грешки наведнъж с ErrorBuilder, отговора SUCCESS(), как ERROR() записва неуспехите и как AUDIT() добавя във файл с дневник кой какво е направил.
Отлагайте работа със setTimeout2() и clearTimeout2()
Използвайте setTimeout2(), за да изпълните функция веднъж, след като извикванията спрат, като предишният таймер със същото id се заменя, и го отменете с clearTimeout2().
Токени, свързани с браузър, чрез ENCRYPTREQ() и DECRYPTREQ()
Криптирайте стойност заедно с user agent (и по желание IP адреса) на заявката и я прочитайте обратно само от същия клиент.
Архивирайте папка с BACKUP() и RESTORE() и изпълнявайте команди със SHELL()
Опаковайте директория в един файл и я разопаковайте отново с BACKUP() и RESTORE(), и изпълнете команда на shell в папката на проекта със SHELL().
Преминете в режим на поддръжка с PAUSESERVER()
Поставете сървъра на пауза по име, така че всяка заявка да получава страница 503, възобновете го и знайте, че без втори аргумент извикването превключва състоянието.
Бизнес правила като текст с NEWMACRO()
Компилирайте малки правила, написани на прост език (IF, ELSE, AND, OR, RETURN, извиквания на помощници), във функция, която изпълнявате с модел, така че правилата да могат да живеят във файл или в база данни.
Сервиране на статични файлове от папката public
Файловете в директорията public се сервират автоматично, без да е нужен маршрут.
Извикайте друг адрес с AJAX() от сървъра
Използвайте AJAX(), за да извикате HTTP адрес с JSON тяло и да получите разпознатия отговор, като promise или с callback, и знайте какво се случва при грешки и XML.
Извикване на други HTTP API с RESTBuilder
Правете GET и POST заявки към друга услуга, задавайте хедъри и timeout и четете статуса и разчетения отговор.
Освободете stream, когато приключи, с CLEANUP()
Използвайте CLEANUP(), за да унищожите stream веднага щом приключи или се провали, така че да не остават отворени файлови дескриптори, с callback или като promise.
Превод на изглед на няколко езика
Маркирайте текстовете в изгледите с @(...) и предоставете преводите във файлове с ресурси, избирани от LOCALIZE().
Изпълнявайте код по график с CRON
Регистрирайте функция с CRON() и cron ред от пет полета и научете кога се изпълнява проверката и как се премахва задача.
Изпълнявайте тежка работа в нишка или дъщерен процес
Използвайте NEWTHREAD(), за да стартирате нишка worker, да ѝ изпращате съобщения и да четете отговорите, без да блокирате главния процес.
Споделете няколко работни нишки с NEWTHREADPOOL()
Стартирайте фиксиран брой workers, вземете един с pool.exec(), когато има работа, върнете го с release() и оставете другите задачи да чакат свободен worker.
Извиквайте други сървъри с REQUEST и запазвайте файлове с DOWNLOAD
Използвайте REQUEST() за HTTP извиквания на ниско ниво с пълен контрол над метода, хедърите, query и тялото, и DOWNLOAD(), за да изтеглите отдалечен файл на диска.
Изпращане на имейл от view
Настройте SMTP във файла config, изобразете view като тяло на съобщението с MAIL() и изпратете готов HTML с HTMLMAIL().
Персонализирайте страниците 404 и 401
Регистрирайте обработчици ROUTE('#404') и ROUTE('#401'), за да замените вградените страници за грешки, и ги задействайте сами с $.fallback().
Изпратете си съобщение с LOGMAIL()
Изпратете съобщение с обикновен текст или JSON на адрес без изглед, за дневници и известия, със същите SMTP настройки като MAIL().
Изпращане на файлове и потоци към клиента
Сервирайте файл от диска с $.file(), наложете име за изтегляне, изпращайте генерирано съдържание с $.stream() и отговорете с 404, когато файлът липсва.
Препращане на заявки към друг сървър
Използвайте PROXY(), за да свържете префикс на URL със сървър нагоре по веригата, изберете как се копира пътят и $.proxy(), за да препратите един маршрут.
Публикувайте локален сървър през тунел с PROXYSERVER() и PROXYCLIENT()
Оставете Total.js сървър с публичен адрес да препраща заявки към програма, която работи само на частна машина, чрез WebSocket тунел, който отваря частната страна.
Защитете формулярите и заявките с CSRF токени
Създайте токен с $.csrf(), изпратете го със заявката и го проверете в middleware, за да се отхвърлят заявки от други сайтове.
Групирайте действия в схема и използвайте повторно определения на input
Използвайте NEWSCHEMA(), за да декларирате свързани действия под едно име, и споделяйте определение на input между действия чрез файл в jsonschemas/.
Изградете конвейер за обработка с transforms
Регистрирайте няколко стъпки под едно име с NEWTRANSFORM() и прекарайте стойност през тях по ред с TRANSFORM().
Обмен на съобщения с Total Messaging Service
Включете WebSocket крайната точка на TMS и оставете външни клиенти да получават публикувани съобщения, да изпращат съобщения към вашето приложение и да извикват неговите функции.
Изградете пълен REST ресурс с действия
Декларирайте действията query, read, insert, update, patch и remove над базата данни NoSQL, с валидиране, 404 за липсващи записи и маршрути, които свързват всеки HTTP метод.
Конфигурирайте WebSocket маршрут с флагове, удостоверяване и параметри
Изберете типа съобщения с @text или @binary, изисквайте влязъл потребител с префикса +, проверете CSRF токен с @csrf и четете параметри на URL в SOCKET маршрути.
Минимизиране и обединяване на CSS, JavaScript и HTML
Статичните файлове и HTML отговорите се минимизират автоматично; използвайте MERGE(), за да сервирате няколко файла като един, и настройките $minify, за да го изключите.
Преоразмеряване и преобразуване на изображения
Обработвайте изображения с Image.load(), свържете операции за размер, изрязване и формат, запазете резултата, измерете размера му и сервирайте миниатюри с $.image().
Проверявайте границите на цифровата схема, вместо да приемате цялостна принуда
Проверете Int, SmallInt, TinyInt и Number2 с индиански компактни схеми, включително фракционни стойности, нулеви и извън ранг вноски.
Използвайте вградените помощни функции за string, number, date и array
Total.js разширява String, Number, Date и Array с помощни функции за slug, хешове, форматиране, разчитане, групиране и търсене и предлага U.extend() и U.clone() за обекти.
Рекордни събития за одитиране с индиански одит
Следвайте опцията за одитиране и изрично обаждайте $.audit(), без да се свързвате с услуга за записване или да пишете чувствителен вход към дневник на заявлението.
Работа в режим debug и release
Опциите на Total.run() избират между режим debug и release; прочетете режима от DEBUG и ограничете маршрути до един режим с @debug и @release.
Тествайте приложението с вградения изпълнител на тестове
Напишете test.js, който стартира приложението, регистрира тестове с Test.push(), проверява резултатите с Test.print() и завършва с ненулев код, когато някой се провали.
Използвайте всички ЦПУ корени в режим на кластер
Започнете няколко работни процеси зад един порт с опцията за кластер на Total.run(), и да знаете какво се споделя между тях и какво не е.
Заредете JavaScript модул от URL с IMPORT()
Изтеглете файл с JavaScript от адрес, пазете го в папката tmp, заредете го с require и използвайте онова, което експортира; второто извикване не го тегли отново.
Изградете поток от компоненти с Flow.load() и го изпълнете с exec()
Опишете FlowStream като компоненти и връзките между тях, заредете го в приложението, изпратете съобщение през него и прочетете отговора, и сменете конфигурацията на компонент, докато работи.
Тествайте компонент на Flow самостоятелно с Flow.test()
Заредете един компонент в собствен поток, изпратете му съобщение от кода и прочетете какво изпраща към изходите си, без да изграждате целия поток.
Извикайте Python програма, която остава пусната, с PYPELINE()
Стартирайте Python скрипт от приложението, изпращайте му JSON съобщения през сокет и получавайте отговорите му, като скриптът се рестартира, ако умре.
Енуми и граници за валидиране на формат
Извършване на положителни и отрицателни компактни схеми проверки за енуми, Цвет, Base64, Zip, Icon, JSON и IP формати.
Ограниченията на обслужването на TotalAPI и Componentator
Проверявайте деактивирания отдел TotalAPI и локалното повторно използване на Componentator без да правите външни повиквания за обслужване.
Операции на QueryBuilder, филтри и договор за шофьор
Инспектирайте опциите на DB и NEWDB, резултатите, изкривяването, грешките и формите на филтрирането, без да обърквате строителя с драйвер на базата данни.
Създаване и изпълнение на индиентен сървър компонент
Компилирайте доверяван Total.js компонент HTML, създавайте пример, валидирате съобщения, пренареждайте и пуснете ресурсите му.
Контролни обаждания, ръчно разрешаване и условни отговори
Извършване на jsonstring, отговори, направени, успешни, упълномощени, персонализирани и последно модифицирани обработка.
Опции за транспорта на действие и експлицитно TMS публикуване
Тест csrf, криптиране, компресиране и публикуване срещу истински HTTP и TMS вместо да се приеме метаданни налагане на поведение.
Невалидирани стационарни каски за освобождаване с Touch
Сервирайте и модифицирайте временно статичен файл, изтрийте скритото му представяне и премахнете скритите 404 записи.
OPENCLIENT RPC, събития и споделени връзки
Упражнявайте OPENCLIENT с локална фиксиране на протокола, включително инициализация, корелация на повикванията, времеви разходи и логическо отстраняване на клиента.
Изтегляне на файлове FlowStream и изпълнение на изолирани работници
Извършете същата надеждна схема на FlowStream като работник лента и детски процес, изтегляне .flow файлове и премахване на примери.
Живот на действие, разширяване на резултатите и администраторски пазители
Упражнения за влизане, излизане, разширяване, съвпадение и съвпадане с валидни, невалидни и неуспешни действия.
Истински SQL с Native QueryBuilder и SQLite транзакции
Регистрирайте ограничен SQLite драйвер, изпълнете параметризирания CRUD и проверете ангажимента, ограничавате неуспеха и се въртите срещу файловата база данни.
Изтеглете ресурсите на приложението и избягвайте изненадите за изпълнение
Извършете LOAD в отделен процес и проверете NPMINSTALL повторно използване на вече наличен пакет без достъп до мрежата.
Търсене на реална локална LDAP директория
Търсете изолирана OpenLDAP инстанция и проверете резултата от връзката в обща стойност5 0.0.19.
Изтегляне на файлове като пакет от Total.js
Създайте локален пакет, заредете дефинициите си чрез стартиращия изтеглятел на рамката и проверете екстракцията в .src.
Собственото изтегляне на файлове и изграждане на линкове за запитване
Проверете по подразбиране изтегляне почистване, автоклериране(фалшиви), експлицитно ясно и href търсене замяна.