# Започнете с Total.js

> Инсталирайте Total.js 5, създайте стартиращия скрипт и първия маршрут, действие и изглед и изпълнете приложението.

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

Total.js 5 е npm пакетът `total5`. Трябва ви Node.js (примерите на този сайт работят с Node.js 24) и празна папка. Създайте проекта и инсталирайте пакета:

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

Стартовият скрипт е файл с име `index.js` в корена на проекта. Той зарежда фреймуърка и стартира сървъра:

```js
require('total5');

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

Това е целият код, който пишете, за да стартирате. Файловете в папките на проекта (вижте страницата за структурата на проекта) се зареждат автоматично. Създайте тези три файла.

**Контролерът** декларира маршрутите. `ROUTE('GET /')` без манипулатор би показал изгледа със същото име; тук манипулаторът рендира `views/index.html` с модел:

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

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

**Действието** има собствена валидация. Маршрутът по-горе изпълнява `Greet/say` с JSON тялото на заявката, а фреймуъркът отхвърля тяло, което не съвпада с `input`:

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

**Изгледът** е HTML с блокове `@{...}`. `views/layout.html` обгръща всеки изглед, а `@{body}` е мястото на изгледа:

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

Стартирайте приложението с `node index.js`. В стандартния режим `debug` то се рестартира при промяна на файл и показва адреса си в терминала. За режим `release` използвайте `node index.js --release`. Ръководството за режимите на изпълнение обяснява разликите.
