Objekt $ pre obchodníka Total.js 5
Obsluha routy dostáva jeden objekt, na tomto webe zapísaný ako $. Popisuje požiadavku a odpovedá na ňu. Odpovedajte iba raz: po $.json(), $.html() alebo inej odpovedi je požiadavka dokončená.
Vlastnosti
| Vlastnosť | Typ | Čo to je |
|---|---|---|
$.url | string | Cesta požiadavky bez reťazca dotazu. |
$.method | string | GET, POST... |
$.query | object | Reťazec dotazu, spracovaný. |
$.params | object | Segmenty {name} routy. |
$.body | object | Telo spracované podľa typu obsahu (JSON, formulár URL-encoded, XML alebo polia multipart). |
$.files | array | Nahrané súbory požiadavky multipart. |
$.headers | object | Hlavičky požiadavky s názvami malými písmenami. |
$.ip | string | IP adresa; prvá adresa z x-forwarded-for, keď hlavička existuje. |
$.host | string | Hlavička host. |
$.referrer | string | Hlavička referer. |
$.protocol | string | http alebo https (aj vtedy, keď to proxy uvádza v x-forwarded-proto). |
$.ext | string | Prípona URL bez bodky ($.extension je to isté). |
$.xhr | boolean | true, keď je hlavička x-requested-with rovná XMLHttpRequest. |
$.mobile | boolean | true, keď user agent vyzerá ako mobilný prehliadač. |
$.robot | boolean | true, keď user agent vyzerá ako crawler. |
$.ua | string | Krátky názov prehliadača a systému, napríklad iPhone Safari alebo Windows Chrome. |
$.user | object | Používateľ, ktorého schválil AUTH(), alebo nič. |
$.language | string | Jazyk, ktorý vybral LOCALIZE(). |
$.datatype | string | json, urlencoded, multipart, xml, text alebo binary: typ tela požiadavky. |
$.response | object | Čo sa odošle: status, headers a value. Pred odpoveďou zmeňte $.response.status a $.response.headers. |
$.req, $.res | objects | Požiadavka a odpoveď Node.js. |
Metódy, ktoré odpovedajú
| Metóda | Čo robí | Recept |
|---|---|---|
$.json(value) | Odpovie JSON. | responses |
$.jsonstring(text) | Odpovie textom, ktorý už je JSON, bez opätovnej serializácie. | controller-completion-and-cache |
$.html(text) | Odpovie HTML. | responses |
$.plain(text) | Odpovie čistým textom ($.text je to isté). | responses |
$.xml(text) | Odpovie XML. | responses |
$.empty() | Odpovie stavom 204 a bez tela. | responses |
$.redirect(url, permanent) | Presmeruje (302, alebo 301, keď je permanent true). | responses |
$.binary(buffer, type, name) | Odpovie bajtmi a typom obsahu. | responses |
$.file(path, name) | Odošle súbor z disku. | file-download |
$.stream(type, stream, name) | Odošle čitateľný stream. | file-download |
$.filefs(storage, id) | Odošle súbor z FILESTORAGE. | filestorage |
$.image(options) | Vytvorí a odošle obrázok na požiadanie. | images |
$.view(name, model) | Vykreslí pohľad s layoutom a odpovie ním. | views-and-layouts |
$.layout(name) | Vyberie iný layout pre nasledujúce $.view(). | view-sections |
$.proxy(url) | Presmeruje požiadavku na inú URL a odpovie jej odpoveďou. | proxy |
$.respond(value) | Odpovie vo formáte $.response.output (json, keď nie je nastavený). | controller-completion-and-cache |
$.invalid(value) | Odpovie chybou: textom, stavovým kódom ako 404 alebo ErrorBuilder. | actions-crud |
$.fallback(code) | Odpovie stránkou chybového kódu, vlastnou, keď existuje ROUTE('#404'). | error-pages |
$.success(value) | Odpovie { "success": true }; value sa k nemu pridá. | responses |
$.callback(err, value) | Pri chybe odpovie $.invalid(err), inak $.json(value) alebo $.success(), keď je value undefined. Bez argumentov vráti funkciu (err, response), ktorá robí to isté. | actions-crud |
$.successful(fn) | Vráti funkciu (err, a, b, c): pri chybe odpovie $.invalid(err), inak zavolá fn(a, b, c). | controller-completion-and-cache |
$.done(arg) | Vráti funkciu (err, response): pri chybe odpovie $.invalid(err), inak odpovie objektom úspechu. | controller-completion-and-cache |
Ďalšie metódy
| Metóda | Čo robí | Recept |
|---|---|---|
$.cookie(name, value, expiration) | Prečíta cookie, alebo ju zapíše, keď odovzdáte hodnotu. | headers-and-cookies |
$.csrf() | Vytvorí token CSRF pre tohto klienta. | csrf-protection |
$.hostname(path) | Adresa tohto servera: protokol, hostiteľ a cesta, ktorú odovzdáte. | restbuilder |
$.action(name, model) | Spustí akciu s touto požiadavkou (používateľ, query a params). | calling-actions-from-code |
$.transform(name, value, callback) | Spustí transformáciu s touto požiadavkou. | transforms |
$.authorize(callback) | Spustí AUTH() pre túto požiadavku a nastaví $.user; bez callbacku vráti promise. | controller-completion-and-cache |
$.notmodified(date) | Odpovie 304 a vráti true, keď požiadavka má hlavičku if-modified-since s týmto dátumom. | controller-completion-and-cache |
$.httpcache(date) | Nastaví hlavičky cache a last-modified odpovede. | controller-completion-and-cache |
$.clear() | Odstráni dočasné súbory nahrávania. Odstránia sa aj tak po skončení požiadavky. | file-upload |
$.autoclear(false) | Ponechá nahrané súbory po požiadavke, aby ste ich mohli použiť neskôr. | upload-lifecycle-and-href |
$.custom() | Povie frameworku, že odpoviete sami cez $.res: nič neodošle. | controller-completion-and-cache |
$.href(key, value) | Použite QUERIFY() ako v odkazovanom recepte, otestovaný natívny pomocník pre odkazy s query. | upload-lifecycle-and-href |
$.flush(), $.resume(), $.free(), $.cancel() | Interné metódy: nevolajte ich. |
Príklad odpovedá vlastnosťami a volá metódy, ktoré nepotrebujú žiadnu prípravu.
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');
}
}