Ruta de sinteză Total.js 5
ROUTE(definition, handler) declară o rută. Definiția este un text cu aceste părți, în această ordine:
[+|-]METHOD /url/{param}/ [@flag ...] [#middleware ...] [<limit] [--> *Action ...]
| Parte | Semnificație |
|---|---|
METHOD | GET, POST, PUT, PATCH, DELETE, sau SOCKET pentru un WebSocket și FILE pentru URL-uri cu extensie: un URL precum /a.txt nu este niciodată potrivit de o rută GET. |
+ sau - înaintea metodei | + acceptă doar cererile pe care AUTH() le-a aprobat, - doar cele anonime; orice altă cerere primește 401. Fără prefix ruta este deschisă. |
/url/ | Calea. Scrie bara finală: rutele sunt potrivite cu ea. |
{name} | Un segment al căii citit din $.params.name. |
* ca ultim segment | Se potrivește cu orice cale de sub el. O rută fără * este mai specifică și câștigă. |
@flag | O condiție pentru cerere: @json, @xml, @xhr, @upload, @debug, @release, @mobile, @robot, @referer (sau @referrer). |
#name | Un middleware înregistrat cu MIDDLEWARE(name, fn). |
<limit | <10kb limitează dimensiunea corpului, <30s timpul cererii. |
--> *Action | Rulează una sau mai multe acțiuni cu intrarea cererii și răspunde cu rezultatul. |
#404, #401... | O rută a cărei definiție este doar # și un cod de stare înlocuiește pagina de eroare. |
O cerere este tratată de prima rută potrivită. O cerere care nu îndeplinește flag-urile unei rute trece la următoarea și se termină cu un 404 când nu se potrivește niciuna; o cerere care nu îndeplinește + sau - primește 401. O rută fără flag-uri pe același URL câștigă întotdeauna în fața unei rute cu flag-uri, deci nu le pune niciodată pe amândouă pe același 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');
}