# Begin met Total.js

> Installeer Total.js 5, creëer het startschrift en de eerste route, actie en weergave, en voer de applicatie uit.

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

Total.js 5 is het npm-pakket `total5`. Je hebt Node.js nodig (de voorbeelden van deze site draaien op Node.js 24) en een lege map. Maak het project aan en installeer het pakket:

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

Het startscript is een bestand met de naam `index.js` in de hoofdmap van het project. Het laadt het framework en start de server:

```js
require('total5');

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

Dat is alle code die je schrijft om te starten. De bestanden in de mappen van het project (zie de pagina over de projectstructuur) worden automatisch geladen. Maak deze drie bestanden.

Een **controller** declareert de routes. `ROUTE('GET /')` zonder handler zou de view met dezelfde naam tonen; hier rendert de handler `views/index.html` met een model:

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

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

Een **actie** heeft zijn eigen validatie. De route hierboven voert `Greet/say` uit met de JSON-body van het verzoek, en het framework weigert een body die niet overeenkomt met `input`:

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

Een **view** is HTML met `@{...}`-blokken. `views/layout.html` omhult elke view en `@{body}` is de plek van de view:

```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>
```

Start de toepassing met `node index.js`. In de standaardmodus `debug` start de toepassing opnieuw wanneer u een bestand wijzigt en toont zij haar adres in de terminal. Gebruik voor de modus `release` het commando `node index.js --release`. De handleiding voor uitvoeringsmodi beschrijft de verschillen.
