# Limitare una route con i flag

> Aggiungi @flag come @json, @xml o @upload così una route corrisponde solo alle richieste a cui è destinata.

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

I flag iniziano con `@` e vanno dopo l'URL. Una route corrisponde solo quando la richiesta soddisfa tutti i suoi flag; altrimenti Total.js prova la route successiva per la stessa URL e risponde 404 se nessuna corrisponde. Flag utili:

- `@json` e `@xml`: il body deve essere JSON o XML
- `@xhr`: la richiesta deve essere AJAX (header `x-requested-with`)
- `@upload`: il body deve essere `multipart/form-data`
- `@debug` e `@release`: la route esiste solo in quella modalità
- `@mobile` e `@robot`: il client è un browser mobile o un crawler

```js controllers/data.js
exports.install = function() {
	ROUTE('POST /data/ @json', json_only);
	ROUTE('POST /data/ @xml', xml_only);

	// Careful: a route with flags has a lower priority than the same URL without flags
	ROUTE('POST /mixed/ @json', json_only);
	ROUTE('POST /mixed/', anything);
};

function json_only($) {
	$.json({ handler: 'json' });
}

function xml_only($) {
	$.json({ handler: 'xml' });
}

function anything($) {
	$.json({ handler: 'anything' });
}
```

Non mescolare mai una route con flag e una route senza flag sulla stessa URL: quella senza flag viene controllata per prima e prende ogni richiesta, quindi la route con flag non viene mai raggiunta.
