# Inizia con il Total.js

> Installare Total.js 5, creare lo script di avvio e la prima rotta, azione e visualizzazione, e eseguire l'applicazione.

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

Total.js 5 è il pacchetto npm `total5`. Ti servono Node.js (gli esempi di questo sito girano su Node.js 24) e una cartella vuota. Crea il progetto e installa il pacchetto:

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

Lo script di avvio è un file chiamato `index.js` nella radice del progetto. Carica il framework e avvia il server:

```js
require('total5');

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

Questo è tutto il codice che scrivi per avviare. I file nelle cartelle del progetto (vedi la pagina sulla struttura del progetto) vengono caricati automaticamente. Crea questi tre file.

Un **controller** dichiara le route. `ROUTE('GET /')` senza handler mostrerebbe la vista con lo stesso nome; qui l'handler renderizza `views/index.html` con un modello:

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

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

Un'**azione** ha la propria validazione. La route qui sopra esegue `Greet/say` con il corpo JSON della richiesta, e il framework rifiuta un corpo che non corrisponde a `input`:

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

Una **vista** è HTML con blocchi `@{...}`. `views/layout.html` avvolge ogni vista e `@{body}` è il posto della 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>
```

Avvia l’applicazione con `node index.js`. Nella modalità predefinita `debug`, l’applicazione si riavvia quando modifichi un file e mostra il proprio indirizzo nel terminale. Per la modalità `release`, usa `node index.js --release`. La guida alle modalità di esecuzione descrive le differenze.
