# A 404-es és 401-es oldal testreszabása

> Regisztrálj ROUTE('#404') és ROUTE('#401') kezelőket a beépített hibaoldalak cseréjéhez, és hívd meg őket magad a $.fallback()-kel.

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

Ha a Total.js nem tud kiszolgálni egy kérést, beépített hibaoldalt mutat. Egy olyan útvonal, amelynek URL-je `#` és az állapotkód, lecseréli: `ROUTE('#404', fn)` a „nem található”-ra, `ROUTE('#401', fn)` a „nem jogosult”-ra, és ugyanígy a `#400`, `#431` és mások. A kezelő `$`-t kap, mint bármely útvonal, de **az állapotot te állítod be** a `$.response.status`-szal: a Total.js nem teszi meg helyetted, ha van saját kezelő. Saját kezelő nélkül a beépített oldal jelenik meg, az AJAX-kérések (`x-requested-with` fejléc) pedig HTML helyett JSON-hibát kapnak.

A `$.fallback(code)` a jelenlegi kérést a `code` kezelőjéhez irányítja, így a saját kódodból válaszolhatsz 404-gyel egy nem létező rekordra vagy 403-mal egy tiltott erőforrásra.

```js controllers/errors.js
exports.install = function() {
	ROUTE('#404', not_found);
	ROUTE('#401', unauthorized);
	ROUTE('GET /items/{id}/', item);
	ROUTE('+GET /private/', private_page);
};

var items = { '1': 'First item' };

function item($) {
	var name = items[$.params.id];
	if (name)
		$.json({ name: name });
	else
		$.fallback(404);
}

function private_page($) {
	$.plain('secret');
}

function not_found($) {
	$.response.status = 404;
	$.html('<h1>Nothing here</h1><p>' + $.url.encode() + ' does not exist.</p>');
}

function unauthorized($) {
	$.response.status = 401;
	$.json({ error: 'Please sign in first' });
}

AUTH(function($) {
	$.invalid();
});
```
