ForgeTotal.js 5
sv

Total.js 5

Anpassa sidorna 404 och 401

Total.js 5 · total5@0.0.19 errors404routing Körd med Total.js 5

När Total.js inte kan betjäna en förfrågan visar det en inbyggd felsida. En rutt vars URL är # plus statuskoden ersätter den: ROUTE('#404', fn) för "hittades inte", ROUTE('#401', fn) för "inte behörig", och detsamma för #400, #431 och andra. Hanteraren får $ som vilken rutt som helst, men statusen sätter du själv med $.response.status: Total.js gör det inte åt dig när en egen hanterare finns. Utan egen hanterare används den inbyggda sidan, och AJAX-förfrågningar (headern x-requested-with) får ett JSON-fel i stället för HTML.

$.fallback(code) skickar den aktuella förfrågan till hanteraren för code, vilket är sättet att svara 404 för en post som inte finns eller 403 för en förbjuden resurs från din egen kod.

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