Route Syntax von Total.js 5
ROUTE(definition, handler) deklariert eine Route. Die Definition ist ein Text mit diesen Teilen in dieser Reihenfolge:
[+|-]METHOD /url/{param}/ [@flag ...] [#middleware ...] [<limit] [--> *Action ...]
| Teil | Bedeutung |
|---|---|
METHOD | GET, POST, PUT, PATCH, DELETE, oder SOCKET für einen WebSocket und FILE für URLs mit Endung: Eine URL wie /a.txt wird nie von einer GET-Route erfasst. |
+ oder - vor der Methode | + akzeptiert nur Anfragen, die AUTH() freigegeben hat, - nur anonyme; jede andere Anfrage wird mit 401 beantwortet. Ohne Präfix ist die Route offen. |
/url/ | Der Pfad. Schreibe den abschließenden Schrägstrich: Routen werden mit ihm verglichen. |
{name} | Ein Pfadsegment, das aus $.params.name gelesen wird. |
* als letztes Segment | Passt auf jeden Pfad darunter. Eine Route ohne * ist spezifischer und gewinnt. |
@flag | Eine Bedingung für die Anfrage: @json, @xml, @xhr, @upload, @debug, @release, @mobile, @robot, @referer (oder @referrer). |
#name | Eine mit MIDDLEWARE(name, fn) registrierte Middleware. |
<limit | <10kb begrenzt die Größe des Bodys, <30s die Dauer der Anfrage. |
--> *Action | Führt eine oder mehrere Actions mit der Eingabe der Anfrage aus und antwortet mit dem Ergebnis. |
#404, #401... | Eine Route, deren Definition nur aus # und einem Statuscode besteht, ersetzt die Fehlerseite. |
Eine Anfrage wird von der ersten passenden Route behandelt. Eine Anfrage, die die Flags einer Route nicht erfüllt, geht zur nächsten Route weiter und endet mit einem 404, wenn keine passt; eine Anfrage, die + oder - nicht erfüllt, erhält ein 401. Eine Route ohne Flags auf derselben URL gewinnt immer gegen eine Route mit Flags, setze daher nie beide auf eine URL.
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 }) });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');
}