# Προσαρμόστε τις σελίδες 404 και 401

> Καταχωρίστε χειριστές ROUTE('#404') και ROUTE('#401') για να αντικαταστήσετε τις ενσωματωμένες σελίδες σφάλματος και ενεργοποιήστε τους μόνοι σας με το $.fallback().

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

Όταν το Total.js δεν μπορεί να εξυπηρετήσει ένα αίτημα, εμφανίζει μια ενσωματωμένη σελίδα σφάλματος. Μια διαδρομή με URL `#` συν τον κωδικό κατάστασης την αντικαθιστά: `ROUTE('#404', fn)` για «δεν βρέθηκε», `ROUTE('#401', fn)` για «μη εξουσιοδοτημένο», και το ίδιο για `#400`, `#431` και άλλα. Ο χειριστής λαμβάνει `$` όπως κάθε διαδρομή, αλλά **την κατάσταση την ορίζετε εσείς** με το `$.response.status`: το Total.js δεν το κάνει για εσάς όταν υπάρχει δικός σας χειριστής. Χωρίς δικό σας χειριστή χρησιμοποιείται η ενσωματωμένη σελίδα και τα αιτήματα AJAX (κεφαλίδα `x-requested-with`) λαμβάνουν σφάλμα JSON αντί για HTML.

Το `$.fallback(code)` στέλνει το τρέχον αίτημα στον χειριστή για το `code`, που είναι ο τρόπος να απαντήσετε 404 για μια εγγραφή που δεν υπάρχει ή 403 για έναν απαγορευμένο πόρο από τον δικό σας κώδικα.

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