# Ejecuta en modo debug y en modo release

> Las opciones de Total.run() eligen entre el modo debug y el release; lee el modo con DEBUG y limita las rutas a un modo con @debug y @release.

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

Total.js funciona en uno de dos modos, **debug** para desarrollar y **release** para el servidor, y el booleano global `DEBUG` le dice a tu código cuál está activo. En modo debug la aplicación se ejecuta bajo un watcher que la reinicia cuando cambias un archivo, los errores muestran detalles y se generan source maps. El modo release no tiene watcher y las páginas de error no muestran los detalles técnicos.

El modo lo decide cómo se arranca la aplicación, en el script de arranque (`index.js`) que llama a `Total.run(options)`:

- por defecto es debug, con el watcher;
- `options.release = true` arranca el modo release; el script de arranque que genera Total.js lo activa desde la línea de comandos, así que `node index.js --release` es la forma de arrancar producción;
- `options.watcher = false` ejecuta un único proceso sin watcher, y eso es siempre modo release (es lo que usan los ejemplos de este recetario).

Antes de que `Total.run()` lo haya decidido, `DEBUG` tiene un valor por defecto tomado de `NODE_ENV`: es `false` cuando `NODE_ENV=production` y `true` en cualquier otro caso. El código que se ejecuta en el momento de cargar un módulo ve ese valor por defecto, así que no confíes en `NODE_ENV` para el modo final, solo en `DEBUG` una vez arrancada la aplicación.

Las rutas pueden seguir el modo. El flag `@debug` hace que una ruta exista solo en modo debug y `@release` solo en modo release; en el otro modo la URL responde 404. Usa `@debug` para las herramientas que necesitas mientras desarrollas (un visor de base de datos, una ruta de datos de prueba) y así nunca llegarán a producción por accidente.

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