# Im Debug- und im Release-Modus ausführen

> Die Optionen von Total.run() wählen zwischen Debug- und Release-Modus; lies den Modus aus DEBUG und beschränke Routen mit @debug und @release auf einen Modus.

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

Total.js läuft in einem von zwei Modi, **debug** für die Entwicklung und **release** für den Server, und der globale Boolean `DEBUG` sagt deinem Code, welcher aktiv ist. Im Debug-Modus läuft die Anwendung unter einem Datei-Watcher, der sie bei einer Dateiänderung neu startet, Fehler zeigen Details und Source Maps werden erzeugt. Der Release-Modus hat keinen Watcher, und die Fehlerseiten enthalten keine technischen Details.

Der Modus wird dadurch bestimmt, wie die Anwendung gestartet wird, im Startskript (`index.js`), das `Total.run(options)` aufruft:

- der Standard ist debug, mit dem Watcher;
- `options.release = true` startet den Release-Modus; das von Total.js generierte Startskript setzt es über die Kommandozeile, `node index.js --release` ist also der Weg, die Produktion zu starten;
- `options.watcher = false` führt einen einzelnen Prozess ohne Watcher aus, und das ist immer der Release-Modus (die Beispiele dieses Kochbuchs verwenden es).

Bevor `Total.run()` entschieden hat, hat `DEBUG` einen Standardwert aus `NODE_ENV`: Er ist `false`, wenn `NODE_ENV=production`, und sonst `true`. Code, der beim Laden eines Moduls läuft, sieht diesen Standardwert, verlasse dich für den endgültigen Modus also nicht auf `NODE_ENV`, sondern nur auf `DEBUG`, nachdem die Anwendung gestartet ist.

Die Routen können dem Modus folgen. Das Flag `@debug` lässt eine Route nur im Debug-Modus existieren und `@release` nur im Release-Modus; im anderen Modus antwortet die URL mit 404. Nutze `@debug` für Werkzeuge, die du während der Entwicklung brauchst (einen Datenbank-Viewer, eine Route zum Befüllen mit Testdaten), damit sie nie versehentlich in die Produktion gelangen.

```js controllers/mode.js
exports.install = function() {
	ROUTE('GET /mode/', mode);
	ROUTE('GET /tools/ @debug', tools);
	ROUTE('GET /status/ @release', status);
};

function mode($) {
	$.json({ debug: DEBUG });
}

function tools($) {
	$.json({ tools: true });
}

function status($) {
	$.json({ status: 'ok' });
}
```
