ForgeTotal.js 5
fr

Total.js 5 (backend)

Routes, actions, schémas, bases de données, WebSocket, vues et tout ce qui s’exécute sur le serveur.

RecetteÉtiquettes

Valider un body JSON avec une action

Définissez un schéma d'entrée sur une action et laissez Total.js rejeter les requêtes invalides avant l'exécution de votre code.

routingactionsvalidation

Exposer des actions via un seul endpoint API

Déclarez des endpoints ROUTE('API ...') pour qu'un client appelle de nombreuses actions avec POST {schema, data} sur une seule URL.

routingapiactions

Lire les paramètres d'URL dans une route

Déclarez des segments dynamiques comme {id} dans une route et lisez-les depuis $.params.

routingparams

Capter de nombreuses URL avec une route générique

Terminez une route par * pour correspondre à tout ce qui se trouve sous un chemin, et gardez des routes spécifiques pour les exceptions.

routing

Gérer chaque méthode HTTP

Déclarez des routes pour GET, POST, PUT, PATCH et DELETE et lisez la méthode depuis $.method.

routinghttp

Restreindre une route avec des flags

Ajoutez des @flags comme @json, @xml ou @upload pour qu'une route ne corresponde qu'aux requêtes auxquelles elle est destinée.

routingflags

Lire la query string et le body de la requête

Utilisez $.query pour les paramètres de l'URL et $.body pour les données JSON ou de formulaire dans un gestionnaire de route.

routingrequest

Limiter la taille du payload et le timeout d'une route

Ajoutez <1kb ou <10s à une route pour plafonner la taille de la requête ou le temps dont le gestionnaire dispose.

routingsecuritylimits

Déclarer des paramètres de route typés dans une action

Utilisez l'option params de NEWACTION pour que Total.js valide les paramètres de l'URL avant l'exécution de votre code.

actionsroutingvalidation

Choisir comment répondre

Envoyez du JSON, du HTML, du texte brut, du XML, des redirections, des réponses vides ou des données binaires depuis un gestionnaire de route.

routingresponse

Lire les en-têtes et travailler avec les cookies

Lisez les en-têtes de la requête depuis $.headers, lisez et écrivez des cookies avec $.cookie() et définissez des en-têtes de réponse.

routingheaderscookies

Recevoir des téléversements de fichiers

Acceptez multipart/form-data avec le flag @upload et lisez les fichiers téléversés depuis $.files.

routinguploadfiles

Autoriser les requêtes cross-origin avec CORS

Appelez CORS() pour autoriser une origine, plusieurs origines ou toutes les origines à utiliser vos routes depuis un navigateur.

securitycorsrouting

Rendre une vue sans écrire de gestionnaire

Une route sans gestionnaire rend la vue nommée d'après son URL, ou la vue que vous indiquez.

routingviews

Choisissez le type d'entrée approprié pour une action

Choisissez les types d'entrée, de paramètres, des définitions de quête et de sortie, y compris les conversions et les valeurs rejetées.

actionsvalidationtypes

Valider la query string dans une action

Déclarez query dans NEWACTION pour valider et convertir les paramètres de l'URL, et lisez les valeurs nettoyées depuis $.query.

actionsvalidationquery

Filtrer la réponse d'une action avec output

Déclarez output pour que seuls les champs listés quittent l'action, par exemple pour ne jamais divulguer un hash de mot de passe.

actionssecurity

Exiger un utilisateur ou une permission dans une action

Utilisez les options user et permissions de NEWACTION pour que l'autorisation vive à côté de l'action, et non dans chaque route.

actionsauthsecurity

Protéger des routes avec AUTH

Authentifiez chaque requête avec AUTH() et limitez les routes aux utilisateurs connectés ou anonymes avec les préfixes + et -.

authroutingsecurity

Déclarer la route à l'intérieur de l'action

Placez la route dans l'option route de NEWACTION et gardez l'URL, la validation et le code au même endroit.

actionsrouting

Connecter des utilisateurs avec l'authentification par session intégrée

Passez un objet d'options à AUTH() pour obtenir des cookies de session signés, un magasin de sessions et la déconnexion sans écrire la plomberie.

authsessionssecurity

Appeler une action depuis votre propre code

Utilisez ACTION() pour exécuter une action depuis un minuteur, une tâche ou une autre action, avec son propre payload, sa query et son utilisateur.

actions

Enchaîner plusieurs actions dans une route

Listez plusieurs actions après --> pour les exécuter à la suite sur le même payload et indiquez laquelle répond avec (response).

actionsrouting

Ajouter un middleware à une route

Enregistrez un middleware avec MIDDLEWARE() et attachez-le aux routes avec le flag #name.

middlewareroutingsecurity

Construire un chat WebSocket

Déclarez une route SOCKET, écoutez les messages et diffusez-les à tous les clients connectés.

websocketrealtime

Se connecter à un serveur WebSocket depuis Node

Utilisez WEBSOCKETCLIENT pour ouvrir une connexion WebSocket depuis votre application, envoyer des messages et réagir aux réponses.

websocketrealtimeintegrations

Découpler votre code avec des événements

Émettez et écoutez des événements d'application avec EMIT(), ON(), ONCE() et OFF() pour que les modules ne s'appellent pas directement.

eventsarchitecture

Stocker et lire des données avec la base NoSQL intégrée

Insérez et interrogez des documents avec NOSQL() et exposez-les via des actions, sans installer de base de données.

nosqldatabaseactions

Interroger la base de données NoSQL

Filtrez, triez, paginez et projetez des documents avec where, in, between, search, sort, take, skip et fields.

nosqldatabasequeries

Mettre à jour et supprimer des documents NoSQL

Modifiez des documents avec update() et where(), supprimez-les avec remove() et lisez combien ont été touchés.

nosqldatabase

Utiliser l'API DATA pour changer de base de données

DATA adresse une table sous la forme base/table, si bien que le même code de requêtes fonctionne avec le NoSQL intégré et avec d'autres bases.

databasenosqlquerybuilder

Mettre des valeurs en cache en mémoire

Stockez des valeurs avec CACHE.set() et une expiration, lisez-les avec CACHE.get() et effacez-les avec remove() ou reset().

cacheperformance

Conserver de petits réglages avec MEMORIZE

Gardez sur disque un objet JSON qui survit aux redémarrages, pour des compteurs et des réglages qui n'ont pas besoin d'une base de données.

storagesettings

Générer des ids uniques et des hashes

Créez des ids avec UID() et GUID(), et des hashes avec HASH(), et sachez lequel utiliser où.

utilitiesidssecurity

Mettre en cache des résultats lents sur disque avec FILECACHE

Utilisez FILECACHE() pour calculer un résultat une fois et le réutiliser depuis un fichier pendant une période, même après un redémarrage.

cacheperformancefiles

Stocker les fichiers téléversés avec FILESTORAGE

Enregistrez les téléversements dans un stockage de fichiers géré avec file.fs() et renvoyez-les avec $.filefs().

filesuploadstorage

Rendre une vue avec un layout

Rendez une vue HTML avec un modèle, parcourez des données et transmettez des valeurs au layout.

viewslayouttemplates

Utiliser les conditions et l'échappement dans les vues

Ramifiez avec @{if}, @{else} et @{fi}, et choisissez entre la sortie échappée @{value} et le HTML brut @{!value}.

viewstemplates

Parcourir des tableaux et des objets dans les vues

Répétez du balisage avec @{foreach} pour des tableaux et des objets, et utilisez l'index de l'élément courant.

viewstemplates

Inclure des vues et des ressources

Réutilisez du balisage avec @{view()} et ajoutez des scripts et des styles avec @{import()}.

viewstemplatesassets

Remplir des sections du layout depuis une vue

Déclarez une section dans une vue avec @{section} et affichez-la dans le layout avec @{section('name')}, et choisissez un autre layout par requête.

viewslayouttemplates

Ajouter des helpers de vue et lire la config dans les vues

Enregistrez des fonctions dans DEF.helpers pour les appeler depuis les vues, et lisez les valeurs de config avec @{'%key'}.

viewstemplatesconfig

Convertir du Markdown en HTML

Utilisez le prototype String.markdown() pour rendre du texte Markdown en HTML, pour du contenu saisi par des utilisateurs ou stocké dans des fichiers.

contentmarkdown

Générer du texte avec des templates Tangular

Utilisez Tangular.render() pour remplir des modèles d'e-mails, de documents et de messages avec des conditions, des boucles et des helpers.

templatescontent

Rendre des templates depuis du texte, des fichiers et des URL avec TEMPLATE

Utilisez TEMPLATE() pour rendre un template Tangular qui est un texte, un fichier du dossier des templates ou une URL, avec ses propres helpers et un modèle par défaut.

templatescontenttangular

Comparer deux listes avec DIFFARR : quoi ajouter, mettre à jour et supprimer

Utilisez DIFFARR() pour comparer les éléments enregistrés en base de données avec ceux d'un formulaire et obtenir ceux à ajouter, à mettre à jour et à supprimer.

utilitiesarraysforms

Query Builder : DB() et NEWDB() avec votre propre pilote de données

Construisez des requêtes avec DB().find().where().sort() et laissez un conducteur enregistré avec NEWDB() les exécuter, tandis qu'un conducteur inscrit implémenter supporté les opérations de base de données.

databasequerybuilder

Configurer l'application avec le fichier config

Gardez les réglages dans un fichier config et lisez-les via CONF.

configsettings

Chiffrer et déchiffrer des données avec une clé

Transformez des objets en jetons opaques avec ENCRYPT() et relisez-les avec DECRYPT(), pour des liens signés et des jetons de courte durée.

securitycrypto

Appeler des services externes avec API() et les pilotes de NEWAPI()

Enregistrez un pilote pour un service avec NEWAPI() et appelez-le depuis les actions avec API(name, schema, data), avec le même style de callback, d'erreur et de promesse que le query builder.

apiservicesintegrations

Parlez aux modèles de langage avec AIMODEL(), NEWAIMODEL() et AIPARSER()

Créez une demande de discussion avec AIMODEL(), laissez un pilote enregistré avec NEWAIMODEL() l'envoyer à un fournisseur et lisez les réponses en streaming avec AIPARSER().

aillmintegrations

Limiter les tentatives échouées avec BLOCKED

Comptez les tentatives par adresse IP avec BLOCKED() et répondez 429 une fois la limite atteinte, pour les connexions et les réinitialisations de mot de passe.

securityrate-limiting

Les petits assistants mondiaux : MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY et PROMISIFY

Utilisez les globaux d'application, les dates, les copies profondes, les lignes de requête et les assistants promis.

globalsutilitieshelpers

Collecter des erreurs avec ErrorBuilder, les journaliser avec ERROR() et tenir une piste d'audit avec AUDIT()

Répondez avec plusieurs erreurs à la fois grâce à ErrorBuilder, la réponse SUCCESS(), la façon dont ERROR() enregistre les échecs et dont AUDIT() ajoute à un fichier journal qui a fait quoi.

errorsloggingaudit

Temporiser un travail avec setTimeout2() et clearTimeout2()

Utilisez setTimeout2() pour exécuter une fonction une seule fois quand les appels cessent, en remplaçant le minuteur précédent de même identifiant, et annulez-le avec clearTimeout2().

timersdebounceutilities

Jetons liés à un navigateur avec ENCRYPTREQ() et DECRYPTREQ()

Chiffrez une valeur avec le user agent (et éventuellement l'adresse IP) de la requête et ne la relisez que depuis le même client.

securityencryptiontokens

Sauvegarder un dossier avec BACKUP() et RESTORE(), et exécuter des commandes avec SHELL()

Regroupez un répertoire dans un seul fichier et dépaquetez-le à nouveau avec BACKUP() et RESTORE(), et exécutez une commande du shell dans le dossier du projet avec SHELL().

backupshellfiles

Mettre l'application en maintenance avec PAUSESERVER()

Mettez le serveur en pause par nom pour que chaque requête reçoive une page 503, reprenez-le et sachez que sans second argument l'appel bascule l'état.

maintenanceserveravailability

Des règles métier sous forme de texte avec NEWMACRO()

Compilez de petites règles écrites dans un langage simple (IF, ELSE, AND, OR, RETURN, appels de helpers) en une fonction que vous exécutez avec un modèle, afin que les règles puissent vivre dans un fichier ou une base de données.

macrosrulesscripting

Servir des fichiers statiques depuis le dossier public

Les fichiers du répertoire public sont servis automatiquement, sans route.

staticfiles

Appeler une autre adresse avec AJAX() depuis le serveur

Utilisez AJAX() pour appeler une adresse HTTP avec un corps JSON et obtenir la réponse analysée, sous forme de promesse ou avec un callback, et sachez ce qui se passe avec les erreurs et le XML.

httprequestsajax

Appeler d'autres API HTTP avec RESTBuilder

Faites des requêtes GET et POST vers un autre service, définissez des en-têtes et un timeout, et lisez le statut et la réponse analysée.

integrationshttprestbuilder

Libérer un flux à sa fin avec CLEANUP()

Utilisez CLEANUP() pour détruire un flux dès qu'il est terminé ou a échoué, afin de ne pas laisser de descripteurs de fichier ouverts, avec un callback ou sous forme de promesse.

streamsfilescleanup

Traduire une vue en plusieurs langues

Marquez les textes avec @(...) dans les vues et fournissez les traductions dans des fichiers de ressources choisis par LOCALIZE().

localizationi18nviews

Exécuter du code selon un calendrier avec CRON

Enregistrez une fonction avec CRON() et une ligne cron à cinq champs, et sachez quand la vérification s'exécute et comment supprimer une tâche.

cronschedulerjobs

Exécuter un travail lourd dans un thread ou un processus enfant

Utilisez NEWTHREAD() pour démarrer un thread worker, lui envoyer des messages et lire ses réponses sans bloquer le processus principal.

workerthreadperformance

Partager quelques threads de travail avec NEWTHREADPOOL()

Démarrez un nombre fixe de workers, empruntez-en un avec pool.exec() quand il y a du travail, rendez-le avec release() et laissez les autres tâches attendre un worker libre.

workerthreadpoolperformance

Appeler d'autres serveurs avec REQUEST et enregistrer des fichiers avec DOWNLOAD

Utilisez REQUEST() pour des appels HTTP de bas niveau avec un contrôle total de la méthode, des en-têtes, de la query et du corps, et DOWNLOAD() pour transférer un fichier distant sur le disque.

httprequestdownload

Envoyer un e-mail à partir d'une vue

Configurez SMTP dans le fichier config, rendez une vue comme corps du message avec MAIL(), et envoyez du HTML déjà prêt avec HTMLMAIL().

mailsmtpemail

Personnaliser les pages 404 et 401

Enregistrez des gestionnaires ROUTE('#404') et ROUTE('#401') pour remplacer les pages d'erreur intégrées, et déclenchez-les vous-même avec $.fallback().

errors404routing

Envoyez-vous un message avec LOGMAIL()

Envoyez un message en texte brut ou en JSON à une adresse sans vue, pour les journaux et les alertes, avec les mêmes réglages SMTP que MAIL().

mailsmtplogging

Envoyer des fichiers et des flux au client

Servez un fichier du disque avec $.file(), imposez un nom de téléchargement, diffusez du contenu généré avec $.stream() et répondez 404 quand le fichier est absent.

filesdownloadstream

Transférer des requêtes vers un autre serveur

Utilisez PROXY() pour associer un préfixe d'URL à un serveur en amont, choisissez comment le chemin est copié, et $.proxy() pour transférer une seule route.

proxygatewayintegrations

Publier un serveur local par un tunnel avec PROXYSERVER() et PROXYCLIENT()

Laissez un serveur Total.js à adresse publique transmettre des requêtes à un programme qui ne tourne que sur une machine privée, grâce à un tunnel WebSocket que le côté privé ouvre.

proxytunnelwebsocketintegrations

Protéger les formulaires et les requêtes avec des jetons CSRF

Créez un jeton avec $.csrf(), envoyez-le avec la requête et vérifiez-le dans un middleware pour rejeter les requêtes provenant d'autres sites.

securitycsrfmiddleware

Regrouper des actions dans un schéma et réutiliser des définitions d'input

Utilisez NEWSCHEMA() pour déclarer des actions liées sous un même nom, et partagez une définition d'input entre actions avec un fichier dans jsonschemas/.

schemaactionsvalidation

Construire un pipeline de traitement avec des transforms

Enregistrez plusieurs étapes sous un même nom avec NEWTRANSFORM() et faites passer une valeur par elles dans l'ordre avec TRANSFORM().

transformpipeline

Échanger des messages avec le Total Messaging Service

Activez le point d'accès WebSocket de TMS et laissez des clients externes recevoir des messages publiés, envoyer des messages à votre application et appeler ses fonctions.

tmspublishsubscribewebsocketmessaging

Construire une ressource REST complète avec des actions

Déclarez les actions query, read, insert, update, patch et remove sur la base NoSQL, avec validation, un 404 pour les enregistrements manquants et des routes qui associent chaque méthode HTTP.

actionscrudrestnosql

Configurer une route WebSocket avec des flags, l'authentification et des paramètres

Choisissez le type de message avec @text ou @binary, exigez un utilisateur connecté avec le préfixe +, vérifiez un jeton CSRF avec @csrf et lisez les paramètres de l'URL dans les routes SOCKET.

websocketrealtimesecurity

Minifier et fusionner CSS, JavaScript et HTML

Les fichiers statiques et les réponses HTML sont minifiés automatiquement ; utilisez MERGE() pour servir plusieurs fichiers comme un seul et les réglages $minify pour le désactiver.

performancecssjavascripthtmlminification

Redimensionner et convertir des images

Traitez des images avec Image.load(), enchaînez les opérations de taille, de recadrage et de format, enregistrez le résultat, mesurez sa taille et servez des vignettes avec $.image().

imagesthumbnailsgraphicsmagick

Vérifier les limites numériques au lieu d'assumer la coercition intégrale

Vérifiez Int, SmallInt, TinyInt et Number2 avec des schémas compacts indigènes, y compris les valeurs fractionnelles, les entrées zéro et hors rang.

validationschemanumbersboundaries

Utiliser les helpers intégrés pour string, number, date et array

Total.js étend String, Number, Date et Array avec des helpers pour les slugs, les hachages, le formatage, l'analyse, le regroupement et la recherche, et offre U.extend() et U.clone() pour les objets.

utilitieshelpersstringarraydate

Enregistrez les événements d’audit d’action avec un récepteur d’audit natif

Observez l'option d'audit et les appels explicites $.audit() sans contacter un service de journalisation ni écrire d'entrée sensible dans un journal d'application.

actionsauditsecurity

Exécuter en mode debug et en mode release

Les options de Total.run() choisissent entre le mode debug et le mode release ; lisez le mode avec DEBUG et limitez des routes à un mode avec @debug et @release.

deploymentdebugreleaseenvironment

Tester l'application avec le lanceur de tests intégré

Écrivez un test.js qui démarre l'application, enregistre des tests avec Test.push(), vérifie les résultats avec Test.print() et se termine avec un code non nul quand l'un échoue.

testingci

Utilisez tous les cœurs CPU avec le mode cluster

Commencez plusieurs processus travaillants derrière un port avec l'option de cluster de Total.run(), et sachez ce qui est partagé entre eux et ce qui n'est pas.

clusterperformancedeployment

Charger un module JavaScript depuis une URL avec IMPORT()

Téléchargez un fichier JavaScript depuis une adresse, gardez-le dans le dossier tmp, chargez-le avec require et utilisez ce qu'il exporte ; le second appel ne le télécharge pas de nouveau.

modulesdownloaddependencies

Construire un flux de composants avec Flow.load() et l'exécuter avec exec()

Décrivez un FlowStream comme des composants et les connexions entre eux, chargez-le dans l'application, envoyez-y un message et lisez la réponse, et changez la configuration d'un composant pendant qu'il tourne.

flowflowstreamcomponentsautomation

Tester un composant Flow seul avec Flow.test()

Chargez un composant dans un flux à lui, envoyez-lui un message depuis le code et lisez ce qu'il envoie à ses sorties, sans construire le flux entier.

flowflowstreamcomponentstests

Appeler un programme Python qui reste en marche avec PYPELINE()

Démarrez un script Python depuis l'application, envoyez-lui des messages JSON par un socket et recevez ses réponses, le script étant relancé s'il meurt.

pythonpypelineintegrationsai

Enums et limites de validation en format

Exécuter des contrôles de schéma compact positifs et négatifs pour les enums, Color, Base64, Zip, Icon, JSON et IP.

total5reference

TotalAPI et limites de service Componentator

Vérifiez la branche TotalAPI désactivée et le réutilisation de la caisse locale Componentator sans faire des appels de service externes.

total5reference

Les opérations de QueryBuilder, les filtres et le contrat de conducteur

Inspectez les options DB et NEWDB, les résultats quoudés, les erreurs et les formes de filtre sans confondre un constructeur avec un pilote de données.

total5reference

Composer et exécuter un composant de serveur

Compilez le composant HTML de confiance Total.js, créez un exemple, validez les messages, reconfigurez-le et libérez ses ressources.

total5reference

Les appels de contrôleurs, l'autorisation manuelle et les réponses conditionnelles

Exécutez jsonstring, réagissez, faites, réussissez, autorisez, personnalisez et modifiez le traitement.

total5reference

Options de transport d'action et publication explicite TMS

Tester CSRF, chiffrer, compresser et publier contre HTTP réel et TMS plutôt que d'assumer les metadata impose le comportement.

total5reference

Invalidation des cache statiques de mode de libération avec TOUCH

Servir et modifier un fichier statique temporaire, nettoyer sa représentation cachée et supprimer les entrées 404 cachées.

total5reference

RPC ouvert, événements et connexions partagées

Exercer OPENCLIENT avec une fixation de protocole locale, y compris l'initialisation, la corrélation de la demande, le timout et la suppression logique-client.

total5reference

Remplir les fichiers FlowStream et exécuter des travailleurs isolés

Exécuter le même schéma de confiance FlowStream comme un filet travailleur et un processus enfant, charger les fichiers .flow et supprimer les exemples.

total5reference

Le cycle de vie d'action, l'extension du résultat et les gardes administrateurs

Exercer l'entrée, la sortie, l'extension, le sa et le su avec des actions valides, inexistantes et échouées.

total5reference

SQL réel avec des transactions natives de QueryBuilder et SQLite

Enregistrez un pilote SQLite limité, exécutez le CRUD paramétrifié et vérifiez les engagements, limitez l'échec et ralliez-vous contre une base de données soutenue par des fichiers.

total5reference

Remplissez les ressources d'application et évitez les surprises du pack de runtime

Exécutez la charge dans un processus séparé et vérifiez NPMINSTALL réutiliser un paquet déjà disponible sans accès au réseau.

total5reference

Interroger un véritable annuaire LDAP local

Interrogez une instance OpenLDAP isolée et vérifiez le résultat de la liaison dans total5 0.0.19.

total5reference

Fichiers d'application en tant que paquet Total.js

Créer un paquet local, charger ses définitions à travers le chargement de démarrage du cadre et vérifier l'extraction dans .src.

total5reference

Propre nettoyage des fichiers téléchargés et création de liens de requête

Vérifiez le nettoyage de téléchargement par défaut, l'effacement automatique (faux), l'effacement explicite et le remplacement des requêtes href.

total5reference