Obiectul unui Total.js 5
Un handler de rută primește un obiect, scris $ pe acest site. Descrie cererea și îi răspunde. Răspunde o singură dată: după $.json(), $.html() sau orice alt răspuns, cererea s-a terminat.
Proprietăți
| Proprietate | Tip | Ce este |
|---|---|---|
$.url | string | Calea cererii, fără șirul de interogare. |
$.method | string | GET, POST... |
$.query | object | Șirul de interogare, analizat. |
$.params | object | Segmentele {name} ale rutei. |
$.body | object | Corpul, analizat după tipul de conținut (JSON, formular URL-encoded, XML sau câmpuri multipart). |
$.files | array | Fișierele încărcate ale unei cereri multipart. |
$.headers | object | Antetele cererii, cu nume cu litere mici. |
$.ip | string | Adresa IP; prima adresă din x-forwarded-for când antetul există. |
$.host | string | Antetul host. |
$.referrer | string | Antetul referer. |
$.protocol | string | http sau https (și când un proxy o indică în x-forwarded-proto). |
$.ext | string | Extensia URL-ului, fără punct ($.extension este la fel). |
$.xhr | boolean | true când antetul x-requested-with este XMLHttpRequest. |
$.mobile | boolean | true când user agent-ul arată ca un browser mobil. |
$.robot | boolean | true când user agent-ul arată ca un crawler. |
$.ua | string | Un nume scurt al browserului și al sistemului, precum iPhone Safari sau Windows Chrome. |
$.user | object | Utilizatorul aprobat de AUTH(), sau nimic. |
$.language | string | Limba aleasă de LOCALIZE(). |
$.datatype | string | json, urlencoded, multipart, xml, text sau binary: tipul corpului cererii. |
$.response | object | Ce va fi trimis: status, headers și value. Schimbă $.response.status și $.response.headers înainte de a răspunde. |
$.req, $.res | objects | Cererea și răspunsul Node.js. |
Metode care răspund
| Metodă | Ce face | Rețetă |
|---|---|---|
$.json(value) | Răspunde cu JSON. | responses |
$.jsonstring(text) | Răspunde cu un text care este deja JSON, fără a-l serializa din nou. | controller-completion-and-cache |
$.html(text) | Răspunde cu HTML. | responses |
$.plain(text) | Răspunde cu text simplu ($.text este la fel). | responses |
$.xml(text) | Răspunde cu XML. | responses |
$.empty() | Răspunde cu statusul 204 și fără corp. | responses |
$.redirect(url, permanent) | Redirecționează (302, sau 301 când permanent este true). | responses |
$.binary(buffer, type, name) | Răspunde cu octeți și un tip de conținut. | responses |
$.file(path, name) | Trimite un fișier de pe disc. | file-download |
$.stream(type, stream, name) | Trimite un stream care poate fi citit. | file-download |
$.filefs(storage, id) | Trimite un fișier dintr-un FILESTORAGE. | filestorage |
$.image(options) | Creează și trimite o imagine la cerere. | images |
$.view(name, model) | Randează o vizualizare cu layout și răspunde cu ea. | views-and-layouts |
$.layout(name) | Alege un alt layout pentru următorul $.view(). | view-sections |
$.proxy(url) | Redirecționează cererea către alt URL și răspunde cu răspunsul acestuia. | proxy |
$.respond(value) | Răspunde în formatul $.response.output (json când nu este setat). | controller-completion-and-cache |
$.invalid(value) | Răspunde cu o eroare: un text, un cod de stare precum 404 sau un ErrorBuilder. | actions-crud |
$.fallback(code) | Răspunde cu pagina unui cod de eroare, cea personalizată când există ROUTE('#404'). | error-pages |
$.success(value) | Răspunde { "success": true }; value este adăugat la el. | responses |
$.callback(err, value) | Cu o eroare răspunde $.invalid(err), altfel $.json(value), sau $.success() când value este undefined. Fără argumente returnează o funcție (err, response) care face același lucru. | actions-crud |
$.successful(fn) | Returnează o funcție (err, a, b, c): cu o eroare răspunde $.invalid(err), altfel apelează fn(a, b, c). | controller-completion-and-cache |
$.done(arg) | Returnează o funcție (err, response): cu o eroare răspunde $.invalid(err), altfel răspunde cu obiectul de succes. | controller-completion-and-cache |
Alte metode
| Metodă | Ce face | Rețetă |
|---|---|---|
$.cookie(name, value, expiration) | Citește un cookie sau scrie unul când transmiți o valoare. | headers-and-cookies |
$.csrf() | Creează un token CSRF pentru acest client. | csrf-protection |
$.hostname(path) | Adresa acestui server: protocol, gazdă și calea pe care o transmiți. | restbuilder |
$.action(name, model) | Rulează o acțiune cu această cerere (utilizator, query și params). | calling-actions-from-code |
$.transform(name, value, callback) | Rulează o transformare cu această cerere. | transforms |
$.authorize(callback) | Rulează AUTH() pentru această cerere și setează $.user; returnează un promise când nu există callback. | controller-completion-and-cache |
$.notmodified(date) | Răspunde 304 și returnează true când cererea are antetul if-modified-since cu acea dată. | controller-completion-and-cache |
$.httpcache(date) | Setează antetele de cache și last-modified ale răspunsului. | controller-completion-and-cache |
$.clear() | Șterge fișierele temporare ale încărcării. Sunt șterse oricum când cererea se termină. | file-upload |
$.autoclear(false) | Păstrează fișierele încărcate după cerere, pentru a le putea folosi mai târziu. | upload-lifecycle-and-href |
$.custom() | Spune framework-ului că răspunzi tu însuți prin $.res: nu va trimite nimic. | controller-completion-and-cache |
$.href(key, value) | Folosește QUERIFY() ca în rețeta legată, helperul nativ testat pentru linkuri cu query. | upload-lifecycle-and-href |
$.flush(), $.resume(), $.free(), $.cancel() | Metode interne: nu le apela. |
Exemplul răspunde cu proprietățile și apelează metodele care nu necesită pregătire.
exports.install = function() {
ROUTE('GET /info/{a}/{b}/', info);
ROUTE('POST /body/ @json', body);
ROUTE('GET /answers/{kind}/', answers);
ROUTE('GET /callback/{kind}/', callback);
};
function info($) {
$.json({
url: $.url,
method: $.method,
query: $.query,
params: $.params,
ext: $.ext,
xhr: $.xhr,
mobile: $.mobile,
robot: $.robot,
ua: $.ua,
ip: $.ip,
host: $.host,
referrer: $.referrer,
protocol: $.protocol,
hostname: $.hostname('/x/'),
datatype: $.datatype
});
}
function body($) {
$.json({ body: $.body, datatype: $.datatype });
}
function answers($) {
switch ($.params.kind) {
case 'json': return $.json({ a: 1 });
case 'jsonstring': return $.jsonstring('{"a":1}');
case 'html': return $.html('<b>x</b>');
case 'plain': return $.plain('x');
case 'xml': return $.xml('<a>1</a>');
case 'empty': return $.empty();
case 'redirect': return $.redirect('/x/', true);
case 'binary': return $.binary(Buffer.from('abc'), 'application/octet-stream');
case 'invalid': return $.invalid(409);
case 'success': return $.success({ id: 7 });
case 'status': $.response.status = 201; return $.json({ created: true });
case 'header': $.response.headers['x-example'] = 'yes'; return $.json({});
}
}
function callback($) {
switch ($.params.kind) {
case 'error': return $.callback('failed');
case 'value': return $.callback(null, { v: 1 });
case 'nothing': return $.callback(null);
case 'function': return setImmediate($.callback(), null, { later: true });
case 'successful': return setImmediate($.successful(function(a, b) { $.json({ a: a, b: b }); }), null, 'x', 'y');
}
}