Route syntax van Total.js 5
ROUTE(definition, handler) declareert een route. De definitie is één tekst met deze onderdelen, in deze volgorde:
[+|-]METHOD /url/{param}/ [@flag ...] [#middleware ...] [<limit] [--> *Action ...]
| Onderdeel | Betekenis |
|---|---|
METHOD | GET, POST, PUT, PATCH, DELETE, of SOCKET voor een WebSocket en FILE voor URL's met een extensie: een URL zoals /a.txt wordt nooit door een GET-route opgevangen. |
+ of - voor de methode | + accepteert alleen verzoeken die AUTH() heeft goedgekeurd, - alleen anonieme; elk ander verzoek krijgt een 401. Zonder voorvoegsel is de route open. |
/url/ | Het pad. Schrijf de slash aan het einde: routes worden ermee vergeleken. |
{name} | Een padsegment dat wordt gelezen uit $.params.name. |
* als laatste segment | Komt overeen met elk pad eronder. Een route zonder * is specifieker en wint. |
@flag | Een voorwaarde voor het verzoek: @json, @xml, @xhr, @upload, @debug, @release, @mobile, @robot, @referer (of @referrer). |
#name | Een middleware geregistreerd met MIDDLEWARE(name, fn). |
<limit | <10kb beperkt de grootte van de body, <30s de duur van het verzoek. |
--> *Action | Voert een of meer acties uit met de invoer van het verzoek en antwoordt met het resultaat. |
#404, #401... | Een route waarvan de definitie alleen # en een statuscode is, vervangt de foutpagina. |
Een verzoek wordt afgehandeld door de eerste overeenkomende route. Een verzoek dat niet aan de flags van een route voldoet, gaat door naar de volgende route en eindigt met een 404 als er geen overeenkomt; een verzoek dat niet aan + of - voldoet, krijgt een 401. Een route zonder flags op dezelfde URL wint altijd van een route met flags, zet ze dus nooit allebei op één 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');
}