# Por que escolher Total.js para uma aplicação Node.js

> O que Total.js oferece à equipe Node.js: um núcleo livre de dependências, tudo que um aplicativo de negócios precisa em uma estrutura, autenticação e validação integradas, uma curva de aprendizado rápida e aplicativos completos de código aberto para começar.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: pt
Content-SHA256: 8c5ec78f1c60f77af70d7e3517e92f3b5e12609702c83b90e73fa504682a7015
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

O Total.js 5 é um framework de aplicações Node.js completo, distribuído como `total5`. Um só pacote dá a uma equipa rotas HTTP, validação de entrada, vistas renderizadas no servidor, autenticação, uploads, rotas WebSocket, tarefas agendadas, localização, e-mail e mais, tudo desenhado para funcionar em conjunto. Constrói a aplicação em vez de escolher, ligar e manter uma dúzia de bibliotecas soltas.

## O que o seu projeto recebe

| O que o seu projeto precisa | O que o Total.js lhe dá | Veja no Forge |
|---|---|---|
| Uma aplicação de negócio interna com formulários, rotas protegidas e uploads de ficheiros | Esquemas de entrada nativos, hooks de autenticação e tratamento de uploads, prontos a usar | [Validação](/en/total5/validate-json-body/), [autenticação](/en/total5/protect-routes-with-auth/), [uploads](/en/total5/file-upload/) |
| Um painel com atualizações em direto e relatórios periódicos | Rotas WebSocket, tarefas agendadas e e-mail no mesmo framework | [Exemplo de WebSocket](/en/total5/websocket-chat/), [tarefas cron](/en/total5/cron-jobs/), [e-mail](/en/total5/send-email/) |
| Uma equipa pequena que quer entregar e manter uma aplicação de servidor | Ficheiros carregados automaticamente e um conjunto partilhado de convenções que tornam cada projeto familiar | [Estrutura do projeto](/en/docs/project-structure/), [convenções](/en/docs/totaljs-agent-conventions/) |
| Uma aplicação renderizada no servidor | Vistas, layouts e localização dentro do mesmo framework | [Vistas e layouts](/en/total5/views-and-layouts/), [localização](/en/total5/localization/) |

Cada linha liga a um exemplo que o Forge executa. O No frontend, o Total.js tem o jComponent e um [catálogo de centenas de componentes prontos](/en/components/), pelo que o mesmo ecossistema cobre também a interface; usá-los é opcional.

## Porque as equipas escolhem o Total.js

Um núcleo sem dependências externas. O pacote `total5` instalado não declara dependências de terceiros em tempo de execução. Não há uma cadeia de módulos escritos por autores diferentes para manter compatíveis, nem um pacote abandonado que pare a sua build, nem surpresas de uma atualização transitiva. Esta continuidade tem um efeito direto e poderoso na forma como um projeto escala e na facilidade de o manter ao longo dos anos: o que aprende e entrega hoje continua a funcionar, apoiado por um único projeto.

O quadro inclui autenticação, sessões assinadas, verificações CSRF, hashing de senhas escrípticas e validação de entrada de ação. [Aplicação de Taskboard](/en/docs/taskboard-reference/) Combine-os em uma única aplicação.

Uma curva de aprendizagem rápida. O Total.js é JavaScript, com convenções que se aprendem depressa, pelo que uma equipa que ainda não o conhece não parte em desvantagem. Os repositórios do Total.js reúnem uma grande coleção de scripts, exemplos e aplicações completas com licença MIT que pode ler, reutilizar e de que pode aprender, e o Forge acrescenta receitas executadas para o resto.

Rápido e leve. O Total.js é rápido, e um só pacote sem árvore de dependências mantém-no leve: menos coisas para carregar, atualizar e auditar, o que conta sobretudo em servidores e dispositivos pequenos. O Forge mede-o em condições controladas e publica latência, CPU e memória de cada carga de trabalho, com os dados em bruto, nos [benchmarks](/en/benchmarks/).

## Comece simples: uma rota HTTP direta

Este exemplo executável valida um corpo com um esquema nativo compacto e responde diretamente a partir de um controlador: poucas linhas e nenhuma camada extra. À medida que a aplicação cresce, as ações de domínio acrescentam um contrato reutilizável e validado que pode chamar a partir de rotas, código e ferramentas.

```js controllers/contacts.js
var schema = NEWSCHEMA('ContactsInput', '*name:String');

exports.install = function() {
	ROUTE('GET /health/', health);
	ROUTE('POST /contacts/', create);
};

function health($) {
	$.json({ ok: true });
}

function create($) {
	var result = schema.transform($.body);
	if (result.error) {
		$.response.status = 400;
		$.json({ error: 'invalid' });
		return;
	}
	$.response.status = 201;
	$.json({ name: result.response.name });
}
```

## Fontes

Forge combina suas reivindicações com coisas que você pode executar. As [diretrizes Total.js](https://github.com/totaljs-es/guidelines) descrevem o estilo de codificação do ecossistema, [Total.js AI Context](https://github.com/totaljs/aicontext) fornece orientação de implementação e o [manifesto de fonte](/ai-sources.json) registra as revisões revisadas. Se um guia e a estrutura instalada diferirem, a fonte instalada será a referência.
