Total.js 5 (backend)
Rotas, ações, esquemas, bases de dados, WebSocket, vistas e tudo o que corre no servidor.
Validar um body JSON com uma ação
Defina um esquema de entrada numa ação e deixe o Total.js rejeitar pedidos inválidos antes de o seu código correr.
Expor ações através de um único endpoint de API
Declare endpoints ROUTE('API ...') para que um cliente chame muitas ações com POST {schema, data} num único URL.
Ler parâmetros do URL numa rota
Declare segmentos dinâmicos como {id} numa rota e leia-os de $.params.
Apanhar muitos URL com uma rota com wildcard
Termine uma rota com * para corresponder a tudo o que está abaixo de um caminho e mantenha rotas específicas para as exceções.
Tratar cada método HTTP
Declare rotas para GET, POST, PUT, PATCH e DELETE e leia o método de $.method.
Restringir uma rota com flags
Acrescente @flags como @json, @xml ou @upload para que uma rota só corresponda aos pedidos a que se destina.
Ler a query string e o body do pedido
Use $.query para os parâmetros do URL e $.body para dados JSON ou de formulário num handler de rota.
Limitar o tamanho do payload e o timeout de uma rota
Acrescente <1kb ou <10s a uma rota para limitar o tamanho do pedido ou o tempo que o handler pode demorar.
Declarar parâmetros de rota tipados numa ação
Use a opção params de NEWACTION para que o Total.js valide os parâmetros do URL antes de o seu código correr.
Escolher como responder
Envie JSON, HTML, texto simples, XML, redirecionamentos, respostas vazias ou dados binários a partir de um handler de rota.
Ler cabeçalhos e trabalhar com cookies
Leia os cabeçalhos do pedido a partir de $.headers, leia e escreva cookies com $.cookie() e defina cabeçalhos de resposta.
Receber carregamentos de ficheiros
Aceite multipart/form-data com o flag @upload e leia os ficheiros carregados de $.files.
Permitir pedidos entre origens com CORS
Chame CORS() para permitir que uma origem, várias origens ou todas as origens usem as suas rotas a partir de um navegador.
Renderizar uma vista sem escrever um handler
Uma rota sem handler renderiza a vista com o nome do seu URL, ou a vista que indicar.
Escolha o tipo de entrada certo para uma ação
Escolha tipos de entrada, parâmetros, definições de consulta e saída, incluindo conversões e valores rejeitados.
Validar a query string numa ação
Declare query em NEWACTION para validar e converter os parâmetros do URL, e leia os valores limpos de $.query.
Filtrar a resposta de uma ação com output
Declare output para que apenas os campos indicados saiam da ação, por exemplo para nunca expor o hash de uma palavra-passe.
Exigir um utilizador ou uma permissão numa ação
Use as opções user e permissions de NEWACTION para que a autorização fique junto da ação e não em cada rota.
Proteger rotas com AUTH
Autentique cada pedido com AUTH() e restrinja as rotas a utilizadores autenticados ou anónimos com os prefixos + e -.
Declarar a rota dentro da ação
Ponha a rota na opção route de NEWACTION e mantenha o URL, a validação e o código no mesmo sítio.
Autenticar utilizadores com a autenticação por sessão integrada
Passe um objeto de opções a AUTH() para obter cookies de sessão assinados, um armazém de sessões e logout sem escrever a infraestrutura.
Chamar uma ação a partir do seu próprio código
Use ACTION() para executar uma ação a partir de um temporizador, de uma tarefa ou de outra ação, com o seu próprio payload, query e utilizador.
Encadear várias ações numa rota
Liste várias ações depois de --> para as executar em sequência sobre o mesmo payload e indique qual responde com (response).
Adicionar um middleware a uma rota
Registe um middleware com MIDDLEWARE() e associe-o às rotas com o flag #name.
Construir um chat WebSocket
Declare uma rota SOCKET, escute mensagens e difunda-as a todos os clientes ligados.
Ligar a um servidor WebSocket a partir do Node
Use WEBSOCKETCLIENT para abrir uma ligação WebSocket a partir da sua aplicação, enviar mensagens e reagir às respostas.
Desacoplar o código com eventos
Emita e escute eventos da aplicação com EMIT(), ON(), ONCE() e OFF() para que os módulos não se chamem diretamente.
Guardar e ler dados com a base de dados NoSQL integrada
Insira e consulte documentos com NOSQL() e exponha-os através de ações, sem instalar nenhuma base de dados.
Consultar a base de dados NoSQL
Filtre, ordene, pagine e projete documentos com where, in, between, search, sort, take, skip e fields.
Atualizar e remover documentos NoSQL
Altere documentos com update() e where(), apague-os com remove() e leia quantos foram afetados.
Usar a API DATA para trocar de base de dados
DATA endereça uma tabela como base/tabela, pelo que o mesmo código de consultas funciona com o NoSQL integrado e com outras bases de dados.
Guardar valores em cache na memória
Guarde valores com CACHE.set() e uma expiração, leia-os com CACHE.get() e apague-os com remove() ou reset().
Guardar pequenas definições com MEMORIZE
Mantenha em disco um objeto JSON que sobrevive a reinícios, para contadores e definições que não precisam de uma base de dados.
Gerar ids únicos e hashes
Crie ids com UID() e GUID(), e hashes com HASH(), e saiba qual usar em cada caso.
Guardar resultados lentos em disco com FILECACHE
Use FILECACHE() para calcular um resultado uma vez e reutilizá-lo a partir de um ficheiro durante um período, mesmo após um reinício.
Guardar ficheiros carregados com FILESTORAGE
Guarde carregamentos num armazém de ficheiros gerido com file.fs() e devolva-os com $.filefs().
Renderizar uma vista com um layout
Renderize uma vista HTML com um modelo, percorra dados e passe valores ao layout.
Usar condições e escape nas vistas
Ramifique com @{if}, @{else} e @{fi}, e escolha entre a saída com escape @{value} e HTML em bruto @{!value}.
Percorrer arrays e objetos nas vistas
Repita marcação com @{foreach} para arrays e objetos e use o índice do elemento atual.
Incluir vistas e recursos
Reutilize marcação com @{view()} e acrescente scripts e estilos com @{import()}.
Preencher secções do layout a partir de uma vista
Declare uma secção numa vista com @{section} e imprima-a no layout com @{section('name')}, e escolha outro layout por pedido.
Acrescentar helpers de vista e ler a config nas vistas
Registe funções em DEF.helpers para as chamar a partir das vistas e leia valores da config com @{'%key'}.
Converter Markdown em HTML
Use o protótipo String.markdown() para converter texto Markdown em HTML, para conteúdo guardado por utilizadores ou em ficheiros.
Gerar texto com templates Tangular
Use Tangular.render() para preencher modelos de e-mails, documentos e mensagens com condições, ciclos e helpers.
Renderize templates a partir de texto, ficheiros e URLs com TEMPLATE
Use TEMPLATE() para renderizar um template Tangular que é um texto, um ficheiro da pasta de templates ou um URL, com os seus próprios helpers e um modelo por omissão.
Compare duas listas com DIFFARR: o que adicionar, atualizar e remover
Use DIFFARR() para comparar os elementos guardados na base de dados com os de um formulário e obter os que é preciso adicionar, atualizar e remover.
Query Builder: DB() e NEWDB() com seu próprio driver de banco de dados
Construa consultas com DB().find().where().sort() e deixe um driver registrado com NEWDB() executá-los, enquanto um driver registado implementa operações de banco de dados suportadas.
Configurar a aplicação com o ficheiro config
Guarde as definições num ficheiro config e leia-as através de CONF.
Cifrar e decifrar dados com uma chave
Transforme objetos em tokens opacos com ENCRYPT() e leia-os de volta com DECRYPT(), para ligações assinadas e tokens de curta duração.
Chame serviços externos com API() e os drivers de NEWAPI()
Registe um driver para um serviço com NEWAPI() e chame-o a partir das ações com API(name, schema, data), com o mesmo estilo de callback, erro e promessa do query builder.
Conversa-se com modelos de idiomas com AIMODEL(), NEWAIMODel() e AIPARSER()
Construa uma solicitação de bate-papo com a AIMODEL(), deixe um motorista registrado com a NEWAIMODAL() enviá-la a um provedor e leia respostas transmitidas com a EIPARSER().
Limitar tentativas falhadas com BLOCKED
Conte tentativas por endereço IP com BLOCKED() e responda 429 quando o limite for atingido, para logins e redefinições de palavra-passe.
Os pequenos assistentes globais: MAIN, REPO, FUNC, NOW, CLONE, COPY, QUERIFY e PROMISIFY
Use globais de aplicativos, datas, cópias profundas, linhas de perguntas e ajudantes prometidos.
Reúna erros com ErrorBuilder, registe-os com ERROR() e mantenha um rasto de auditoria com AUDIT()
Responda com vários erros de uma vez usando ErrorBuilder, a resposta SUCCESS(), como ERROR() regista as falhas e como AUDIT() acrescenta a um ficheiro de registo quem fez o quê.
Adie trabalho com setTimeout2() e clearTimeout2()
Use setTimeout2() para executar uma função uma só vez depois de as chamadas deixarem de chegar, substituindo o temporizador anterior com o mesmo id, e cancele-o com clearTimeout2().
Tokens ligados a um navegador com ENCRYPTREQ() e DECRYPTREQ()
Cifre um valor juntamente com o user agent (e opcionalmente o endereço IP) do pedido e leia-o de volta apenas a partir do mesmo cliente.
Faça uma cópia de uma pasta com BACKUP() e RESTORE(), e execute comandos com SHELL()
Empacote um diretório num único ficheiro e desempacote-o de novo com BACKUP() e RESTORE(), e execute um comando da shell na pasta do projeto com SHELL().
Ponha a aplicação em manutenção com PAUSESERVER()
Pause o servidor por nome para que cada pedido receba uma página 503, retome-o e saiba que sem segundo argumento a chamada alterna o estado.
Regras de negócio como texto com NEWMACRO()
Compile pequenas regras escritas numa linguagem simples (IF, ELSE, AND, OR, RETURN, chamadas a helpers) numa função que executa com um modelo, para que as regras possam viver num ficheiro ou numa base de dados.
Servir ficheiros estáticos a partir da pasta public
Os ficheiros do diretório public são servidos automaticamente, sem precisar de uma rota.
Chame outro endereço com AJAX() a partir do servidor
Use AJAX() para chamar um endereço HTTP com um corpo JSON e obter a resposta já interpretada, como promessa ou com callback, e saiba o que acontece com erros e com XML.
Chamar outras APIs HTTP com RESTBuilder
Faça pedidos GET e POST a outro serviço, defina cabeçalhos e um timeout, e leia o estado e a resposta interpretada.
Liberte um stream quando termina com CLEANUP()
Use CLEANUP() para destruir um stream assim que terminou ou falhou, para que não fiquem descritores de ficheiro abertos, com um callback ou como promessa.
Traduzir uma vista para vários idiomas
Marque textos com @(...) nas vistas e forneça as traduções em ficheiros de recursos escolhidos por LOCALIZE().
Executar código segundo um agendamento com CRON
Registe uma função com CRON() e uma linha cron de cinco campos, e saiba quando a verificação corre e como remover uma tarefa.
Executar trabalho pesado numa thread ou num processo filho
Use NEWTHREAD() para iniciar uma thread worker, enviar-lhe mensagens e ler as respostas sem bloquear o processo principal.
Partilhe alguns threads de trabalho com NEWTHREADPOOL()
Arranque um número fixo de workers, peça emprestado um com pool.exec() quando houver trabalho, devolva-o com release() e deixe os outros trabalhos esperar por um worker livre.
Chamar outros servidores com REQUEST e guardar ficheiros com DOWNLOAD
Use REQUEST() para chamadas HTTP de baixo nível com controlo total do método, cabeçalhos, query e corpo, e DOWNLOAD() para transferir um ficheiro remoto para o disco.
Enviar um e-mail a partir de uma vista
Configure o SMTP no ficheiro config, renderize uma vista como corpo da mensagem com MAIL() e envie HTML já pronto com HTMLMAIL().
Personalizar as páginas 404 e 401
Registe handlers ROUTE('#404') e ROUTE('#401') para substituir as páginas de erro incorporadas e dispare-os você mesmo com $.fallback().
Envie uma mensagem a si próprio com LOGMAIL()
Envie uma mensagem de texto simples ou JSON para um endereço sem vista, para registos e alertas, com as mesmas definições SMTP de MAIL().
Enviar ficheiros e streams ao cliente
Sirva um ficheiro do disco com $.file(), force um nome de descarga, envie conteúdo gerado com $.stream() e responda 404 quando o ficheiro não existe.
Reencaminhar pedidos para outro servidor
Use PROXY() para associar um prefixo de URL a um servidor de destino, escolha como o caminho é copiado e $.proxy() para reencaminhar uma única rota.
Publique um servidor local através de um túnel com PROXYSERVER() e PROXYCLIENT()
Deixe um servidor Total.js com endereço público reencaminhar pedidos para um programa que só corre numa máquina privada, com um túnel WebSocket que o lado privado abre.
Proteger formulários e pedidos com tokens CSRF
Crie um token com $.csrf(), envie-o com o pedido e verifique-o num middleware para rejeitar pedidos vindos de outros sites.
Agrupar ações num schema e reutilizar definições de input
Use NEWSCHEMA() para declarar ações relacionadas sob um nome e partilhe uma definição de input entre ações com um ficheiro em jsonschemas/.
Construir um pipeline de processamento com transforms
Registe vários passos sob um nome com NEWTRANSFORM() e faça passar um valor por eles, por ordem, com TRANSFORM().
Trocar mensagens com o Total Messaging Service
Ative o endpoint WebSocket do TMS e deixe que clientes externos recebam mensagens publicadas, enviem mensagens à sua aplicação e chamem as suas funções.
Construir um recurso REST completo com ações
Declare as ações query, read, insert, update, patch e remove sobre a base de dados NoSQL, com validação, um 404 para registos em falta e rotas que associam cada método HTTP.
Configurar uma rota WebSocket com flags, autenticação e parâmetros
Escolha o tipo de mensagem com @text ou @binary, exija um utilizador autenticado com o prefixo +, verifique um token CSRF com @csrf e leia parâmetros do URL em rotas SOCKET.
Minificar e juntar CSS, JavaScript e HTML
Os ficheiros estáticos e as respostas HTML são minificados automaticamente; use MERGE() para servir vários ficheiros como um só e as definições $minify para o desativar.
Redimensionar e converter imagens
Processe imagens com Image.load(), encadeie operações de tamanho, corte e formato, guarde o resultado, meça o seu tamanho e sirva miniaturas com $.image().
Verifique os limites do esquema numérico em vez de assumir a coerção completa
Verifique Int, SmallInt, TinyInt e Number2 com esquemas compactos nativos, incluindo valores fracionários, entradas zero e out-of-range.
Usar os helpers incorporados de string, number, date e array
O Total.js estende String, Number, Date e Array com helpers para slugs, hashes, formatação, parsing, agrupamento e pesquisa, e oferece U.extend() e U.clone() para objetos.
Eventos de auditoria de ação com uma auditoria nativa
Observe a opção de auditoria e exibir chamadas $.audit() sem entrar em contato com um serviço de logging ou escrever uma entrada sensível para um log da aplicação.
Executar em modo debug e em modo release
As opções de Total.run() escolhem entre o modo debug e o release; leia o modo com DEBUG e limite rotas a um modo com @debug e @release.
Testar a aplicação com o executor de testes incorporado
Escreva um test.js que inicia a aplicação, regista testes com Test.push(), verifica resultados com Test.print() e termina com um código diferente de zero quando um falha.
Use todos os cores da CPU com o modo de cluster
Comece vários processos de trabalhadores por trás de um porto com a opção de cluster do Total.run(), e saiba o que é compartilhado entre eles e o que não é.
Carregue um módulo JavaScript a partir de um URL com IMPORT()
Descarregue um ficheiro com JavaScript de um endereço, guarde-o na pasta tmp, faça require e use o que exporta; a segunda chamada não o descarrega outra vez.
Construa um fluxo de componentes com Flow.load() e execute-o com exec()
Descreva um FlowStream como componentes e as ligações entre eles, carregue-o na aplicação, envie uma mensagem através dele e leia a resposta, e altere a configuração de um componente enquanto corre.
Teste um componente do Flow isoladamente com Flow.test()
Carregue um componente num fluxo só seu, envie-lhe uma mensagem a partir do código e leia o que envia para as suas saídas, sem construir o fluxo inteiro.
Chame um programa Python que continua a correr com PYPELINE()
Arranque um script Python a partir da aplicação, envie-lhe mensagens JSON por um socket e receba as suas respostas, com o script reiniciado se morrer.
Enums e limites de validação de formato string
Execute o esquema compacto positivo e negativo para enums, Color, Base64, Zip, Icon, JSON e formatos IP.
TotalAPI e limites de serviço Componentator
Verifique o ramo de TotalAPI e Componentator local-cache reutilizado sem fazer chamadas de serviço externas.
QueryBuilder operações, filtros e contrato de driver
Verifique as opções nativas de DB e NEWDB, os resultados quoed, os erros e as formas de filtro sem confundir um construtor com um driver de dados.
Compilando e executando um componente nativo do servidor
Compila o componente confiável de Total.js HTML, crie um exemplo, valida mensagens, reconfigure e libera seus recursos.
Controlador de chamadas, autorização manual e respostas condicionais
Execute jsonstring, respondendo, feito, bem sucedido, autorizado, personalizado e manuseio modificado.
Opções de transporte de ação e publicação explícita de TMS
Testar CSRF, criptografar, compressar e publicar contra o HTTP real e TMS em vez de assumir metadados forçando comportamento.
Invalidação de cache estático em modo de liberação com Touch
Servir e modificar um arquivo estático temporário, limpar a sua representação cache e remover as entradas cache 404.
OPENCLIENT RPC, eventos e conexões compartilhadas
Exerce OPENCLIENT com uma fixação de protocolo local, incluindo iniciação, correlação de chamada, timout e remoção lógica-cliente.
Carregar arquivos FlowStream e executar trabalhadores isolados
Execute o mesmo esquema de confiança FlowStream como um fio de trabalho e um processo infantil, carregue arquivos .flow e remova instâncias.
Ação de ciclo de vida, extensão de resultado e guardas de administrador
Exerce entrada, saída, extensão, sa e su com ações válidas, inválidas e fracassadas.
SQL real com transações nativas de QueryBuilder e SQLite
Registre um driver limitado SQLite, execute o CRUD paramétrico e verifica o compromisso, restringe a falha e retorna contra uma base de dados suportada por arquivos.
Carregar recursos de aplicação e evitar surpresas em pacotes de tempo de execução
Execute o carregamento em um processo separado e confira a NPMINSTALL para reutilizar um pacote já disponível sem acesso à rede.
Querer um diretório LDAP local real
Solicite uma instância OpenLDAP isolada e verifica o resultado de ligação em total5 0.0.19.
Arquivos de aplicação como um pacote Total.js
Crie um pacote local, carregue suas definições através do carregador de startup e verifica a extração em .src.
Limpar o seu arquivo e criar links de query
Verifique o upload padrão de limpeza, autoclear(false), explicitamente claro e substituição de query href.