# Draaien in debug- en releasemodus

> De opties van Total.run() kiezen tussen debug- en releasemodus; lees de modus uit DEBUG en beperk routes tot één modus met @debug en @release.

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

Total.js draait in een van twee modi, **debug** voor ontwikkeling en **release** voor de server, en de globale boolean `DEBUG` vertelt je code welke actief is. In debugmodus draait de applicatie onder een bestandswatcher die haar herstart wanneer je een bestand wijzigt, tonen fouten details en worden source maps gegenereerd. De releasemodus heeft geen watcher en de foutpagina's tonen geen technische details.

De modus wordt bepaald door hoe de applicatie wordt gestart, in het startscript (`index.js`) dat `Total.run(options)` aanroept:

- de standaard is debug, met de watcher;
- `options.release = true` start de releasemodus; het startscript dat Total.js genereert stelt dat in vanaf de opdrachtregel, dus `node index.js --release` is de manier om productie te starten;
- `options.watcher = false` draait één proces zonder watcher, en dat is altijd releasemodus (het is wat de voorbeelden van dit kookboek gebruiken).

Voordat `Total.run()` heeft beslist, heeft `DEBUG` een standaardwaarde uit `NODE_ENV`: die is `false` wanneer `NODE_ENV=production` en anders `true`. Code die draait op het moment dat een module wordt geladen ziet die standaardwaarde, vertrouw dus voor de uiteindelijke modus niet op `NODE_ENV`, maar alleen op `DEBUG` nadat de applicatie is gestart.

De routes kunnen de modus volgen. De vlag `@debug` laat een route alleen in debugmodus bestaan en `@release` alleen in releasemodus; in de andere modus antwoordt de URL met 404. Gebruik `@debug` voor hulpmiddelen die je tijdens de ontwikkeling nodig hebt (een databaseviewer, een route met testgegevens), zodat ze nooit per ongeluk in productie belanden.

```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' });
}
```
