ForgeDocumentation
fr

Documentation

Route syntaxe de Total.js 5

Total.js 5 · total5@0.0.19 referenceroutingsyntax Exécutée avec Total.js 5

ROUTE(definition, handler) déclare une route. La définition est un texte composé de ces parties, dans cet ordre :

[+|-]METHOD /url/{param}/ [@flag ...] [#middleware ...] [<limit] [--> *Action ...]

PartieSignification
METHODGET, POST, PUT, PATCH, DELETE, ou SOCKET pour un WebSocket et FILE pour les URL avec extension : une URL comme /a.txt n'est jamais captée par une route GET.
+ ou - avant la méthode+ n'accepte que les requêtes que AUTH() a approuvées, - que les requêtes anonymes ; toute autre requête reçoit un 401. Sans préfixe, la route est ouverte.
/url/Le chemin. Écrivez la barre oblique finale : les routes sont comparées avec elle.
{name}Un segment du chemin lu depuis $.params.name.
* comme dernier segmentCorrespond à tout chemin en dessous. Une route sans * est plus précise et l'emporte.
@flagUne condition pour la requête : @json, @xml, @xhr, @upload, @debug, @release, @mobile, @robot, @referer (ou @referrer).
#nameUn middleware enregistré avec MIDDLEWARE(name, fn).
<limit<10kb limite la taille du corps, <30s la durée de la requête.
--> *ActionExécute une ou plusieurs actions avec l'entrée de la requête et répond avec le résultat.
#404, #401...Une route dont la définition est seulement # et un code d'état remplace la page d'erreur.

Une requête est traitée par la première route correspondante. Une requête qui ne remplit pas les drapeaux d'une route passe à la suivante et se termine par un 404 si aucune ne correspond ; une requête qui ne remplit pas + ou - reçoit un 401. Une route sans drapeaux sur la même URL l'emporte toujours sur une route avec drapeaux, ne placez donc jamais les deux sur une même URL.

definitions/auth.js
AUTH(function($) {
	if ($.headers['x-token'] === 'secret')
		$.success({ id: '1' });
	else
		$.invalid();
});

MIDDLEWARE('stamp', function($, next) {
	$.response.headers['x-stamp'] = 'yes';
	next();
});

NEWACTION('Echo/one', { name: 'one', input: '*text:String', action: ($, model) => $.callback({ one: model.text }) });
NEWACTION('Echo/two', { name: 'two', action: ($, model) => $.callback({ two: true }) });
controllers/syntax.js
exports.install = function() {
	ROUTE('GET /plain/', plain);
	ROUTE('GET /users/{id}/', user);
	ROUTE('GET /files/*', files);
	ROUTE('POST /json/ @json', json);
	ROUTE('+GET /private/', plain);
	ROUTE('-GET /guest/', plain);
	ROUTE('GET /stamped/ #stamp', plain);
	ROUTE('POST /echo/ @json --> *Echo/one');
	ROUTE('FILE /robots-example.txt', file);
	ROUTE('#404', missing);
};

function plain($) {
	$.json({ ok: true });
}

function user($) {
	$.json({ id: $.params.id });
}

function files($) {
	$.json({ url: $.url });
}

function json($) {
	$.json({ body: $.body });
}

function file($) {
	$.plain('from a FILE route');
}

function missing($) {
	$.response.status = 404;
	$.plain('custom 404');
}