# Comece com o Total.js

> Instale Total.js 5, crie o script de início e a primeira rota, ação e visualização, e execute o aplicativo.

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

O Total.js 5 é o pacote npm `total5`. Precisa do Node.js (os exemplos deste site correm no Node.js 24) e de uma pasta vazia. Crie o projeto e instale o pacote:

```bash
mkdir hello && cd hello
npm init -y
npm install total5
```

O script de arranque é um ficheiro chamado `index.js` na raiz do projeto. Carrega o framework e inicia o servidor:

```js
require('total5');

Total.run({ port: 8000 });
```

Este é todo o código que escreve para arrancar. Os ficheiros das pastas do projeto (veja a página sobre a estrutura do projeto) são carregados automaticamente. Crie estes três ficheiros.

Um **controlador** declara as rotas. `ROUTE('GET /')` sem manipulador mostraria a vista com o mesmo nome; aqui o manipulador renderiza `views/index.html` com um modelo:

```js controllers/index.js
exports.install = function() {
	ROUTE('GET /', home);
	ROUTE('POST /greet/ --> *Greet/say');
};

function home($) {
	$.view('index', { title: 'Hello Total.js' });
}
```

Uma **ação** tem a sua própria validação. A rota acima executa `Greet/say` com o corpo JSON do pedido, e o framework rejeita um corpo que não corresponda a `input`:

```js definitions/greet.js
NEWACTION('Greet/say', {
	name: 'Say hello',
	input: '*name:String',
	action: function($, model) {
		$.callback({ message: 'Hello, ' + model.name + '!' });
	}
});
```

Uma **vista** é HTML com blocos `@{...}`. `views/layout.html` envolve cada vista e `@{body}` é o lugar da vista:

```html views/layout.html
<!DOCTYPE html>
<html>
<head><meta charset="utf-8" /><title>Hello</title></head>
<body>@{body}</body>
</html>
```

```html views/index.html
<h1>@{model.title}</h1>
```

Inicie a aplicação com `node index.js`. No modo predefinido `debug`, a aplicação reinicia quando altera um ficheiro e apresenta o seu endereço no terminal. Para o modo `release`, utilize `node index.js --release`. O guia dos modos de execução explica as diferenças.
