# Projektstruktur einer Total.js 5 Anwendung

> Die Ordner eines Total.js-5-Projekts, ihr Inhalt und ihr automatisches Laden.

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

Eine Total.js-Anwendung ist ein Ordner mit einem Startskript (`index.js`) und einer Reihe von Ordnern mit festen Namen. **Du importierst deine Dateien nicht**: Beim Start liest Total.js die folgenden Ordner und lädt jede `.js`-Datei darin (in einem Ordner namens `plugins/` lädt es die `index.js` jedes Unterordners). Eine Datei ist ein normales Node.js-Modul; exportiert sie eine `install`-Funktion, ruft Total.js sie nach dem Laden der Datei auf.

| Ordner | Was hineingehört |
|---|---|
| `controllers/` | Routen: `exports.install = function() { ROUTE(...) }`. |
| `definitions/` | Code, der beim Start läuft und globale Dinge deklariert: Actions mit `NEWACTION()`, Middleware, `AUTH()`, Helper, eigene Globals. |
| `actions/` | Actions (`NEWACTION()`), wenn du sie getrennt von den übrigen Definitionen halten möchtest. |
| `schemas/` | Schemas (`NEWSCHEMA()`) mit ihren Actions. |
| `models/` | Wird beim Start wie die anderen geladen; Total.js lädt nur die Dateien, was sie enthalten, liegt bei dir. |
| `middleware/` | Middleware (`MIDDLEWARE()`), nach den anderen Ordnern geladen. |
| `modules/` | Wiederverwendbare Module; der Export kann eine `id` (wird in `MODS` gehalten) und eine `install`-Funktion haben. |
| `extensions/` | Wird beim Start wie die anderen geladen; Total.js lädt nur die Dateien, was sie enthalten, liegt bei dir. |
| `plugins/` | Plugins: ein Ordner pro Plugin mit einer `index.js`. |
| `views/` | HTML-Views und das `layout.html`. |
| `public/` | Statische Dateien, die unverändert und ohne Route ausgeliefert werden. |
| `resources/` | Übersetzungsdateien (`.resource`), siehe das Rezept zur Lokalisierung. |
| `jsonschemas/` | Wiederverwendbare Eingabedefinitionen (`.txt` oder `.json`), siehe das Rezept zu Schemas. |
| `databases/` | Dateien der eingebauten NoSQL-Datenbank und von `MEMORIZE()`. |
| `tmp/` | Temporäre Dateien und Caches (`PATH.tmp()`). |
| `logs/` | Logdateien. |
| `private/` | Dateien, die nicht öffentlich sein dürfen; sende sie nach einer Prüfung mit `$.file()`. |
| `workers/` | Dateien von `NEWTHREAD()` und `NEWFORK()`. |
| `config` | Die Konfigurationsdatei (eine Datei, kein Ordner). |

Die Helper von `PATH` bauen den absoluten Pfad jedes Ordners: `PATH.root()`, `PATH.public()`, `PATH.private()`, `PATH.tmp()`, `PATH.logs()`, `PATH.databases()`. Sie liefern den Pfad ohne abschließenden Schrägstrich, und für den Ordner der Views gibt es keinen Helper. Das Beispiel legt in jeden der Ordner, die Total.js lädt, eine Datei und liest zurück, was geladen wurde.

```js extensions/marker.js
(MAIN.loaded = MAIN.loaded || []).push('extensions');
```

```js modules/marker.js
(MAIN.loaded = MAIN.loaded || []).push('modules');
module.exports.id = 'modules-file';
```

```js actions/marker.js
(MAIN.loaded = MAIN.loaded || []).push('actions');
```

```js schemas/marker.js
(MAIN.loaded = MAIN.loaded || []).push('schemas');
```

```js models/marker.js
(MAIN.loaded = MAIN.loaded || []).push('models');
```

```js definitions/marker.js
(MAIN.loaded = MAIN.loaded || []).push('definitions');
```

```js controllers/marker.js
(MAIN.loaded = MAIN.loaded || []).push('controllers');
```

```js middleware/marker.js
(MAIN.loaded = MAIN.loaded || []).push('middleware');
```

```js controllers/structure.js
exports.install = function() {
	ROUTE('GET /structure/', structure);
};

function structure($) {
	$.json({
		loaded: MAIN.loaded || [],
		modules: Object.keys(MODS),
		paths: {
			root: PATH.root(),
			public: PATH.public(),
			private: PATH.private(),
			tmp: PATH.tmp(),
			logs: PATH.logs(),
			databases: PATH.databases()
		}
	});
}
```
