O objeto de um Total.js 5
Um manipulador de rota recebe um objeto, escrito $ neste site. Descreve o pedido e responde-lhe. Responda uma só vez: depois de $.json(), $.html() ou qualquer outra resposta, o pedido está terminado.
Propriedades
| Propriedade | Tipo | O que é |
|---|---|---|
$.url | string | O caminho do pedido, sem a query string. |
$.method | string | GET, POST... |
$.query | object | A query string, analisada. |
$.params | object | Os segmentos {name} da rota. |
$.body | object | O corpo, analisado segundo o seu tipo de conteúdo (JSON, formulário URL-encoded, XML ou campos multipart). |
$.files | array | Os ficheiros carregados de um pedido multipart. |
$.headers | object | Os cabeçalhos do pedido, com nomes em minúsculas. |
$.ip | string | O endereço IP; o primeiro endereço de x-forwarded-for quando o cabeçalho existe. |
$.host | string | O cabeçalho host. |
$.referrer | string | O cabeçalho referer. |
$.protocol | string | http ou https (também quando um proxy o indica em x-forwarded-proto). |
$.ext | string | A extensão do URL, sem o ponto ($.extension é o mesmo). |
$.xhr | boolean | true quando o cabeçalho x-requested-with é XMLHttpRequest. |
$.mobile | boolean | true quando o user agent parece um navegador móvel. |
$.robot | boolean | true quando o user agent parece um rastreador. |
$.ua | string | Um nome curto do navegador e do sistema, como iPhone Safari ou Windows Chrome. |
$.user | object | O utilizador que AUTH() aprovou, ou nada. |
$.language | string | A língua que LOCALIZE() escolheu. |
$.datatype | string | json, urlencoded, multipart, xml, text ou binary: o tipo do corpo do pedido. |
$.response | object | O que será enviado: status, headers e value. Altere $.response.status e $.response.headers antes de responder. |
$.req, $.res | objects | O pedido e a resposta do Node.js. |
Métodos que respondem
| Método | O que faz | Receita |
|---|---|---|
$.json(value) | Responde com JSON. | responses |
$.jsonstring(text) | Responde com um texto que já é JSON, sem o voltar a serializar. | controller-completion-and-cache |
$.html(text) | Responde com HTML. | responses |
$.plain(text) | Responde com texto simples ($.text é o mesmo). | responses |
$.xml(text) | Responde com XML. | responses |
$.empty() | Responde com o estado 204 e sem corpo. | responses |
$.redirect(url, permanent) | Redireciona (302, ou 301 quando permanent é true). | responses |
$.binary(buffer, type, name) | Responde com bytes e um tipo de conteúdo. | responses |
$.file(path, name) | Envia um ficheiro do disco. | file-download |
$.stream(type, stream, name) | Envia um stream legível. | file-download |
$.filefs(storage, id) | Envia um ficheiro de um FILESTORAGE. | filestorage |
$.image(options) | Cria e envia uma imagem a pedido. | images |
$.view(name, model) | Renderiza uma vista com o layout e responde com ela. | views-and-layouts |
$.layout(name) | Escolhe outro layout para o próximo $.view(). | view-sections |
$.proxy(url) | Reencaminha o pedido para outro URL e responde com a sua resposta. | proxy |
$.respond(value) | Responde no formato de $.response.output (json quando não está definido). | controller-completion-and-cache |
$.invalid(value) | Responde com um erro: um texto, um código de estado como 404 ou um ErrorBuilder. | actions-crud |
$.fallback(code) | Responde com a página de um código de erro, a personalizada quando existe ROUTE('#404'). | error-pages |
$.success(value) | Responde { "success": true }; value é-lhe acrescentado. | responses |
$.callback(err, value) | Com um erro responde $.invalid(err), caso contrário $.json(value), ou $.success() quando value é undefined. Sem argumentos devolve uma função (err, response) que faz o mesmo. | actions-crud |
$.successful(fn) | Devolve uma função (err, a, b, c): com um erro responde $.invalid(err), caso contrário chama fn(a, b, c). | controller-completion-and-cache |
$.done(arg) | Devolve uma função (err, response): com um erro responde $.invalid(err), caso contrário responde com o objeto de sucesso. | controller-completion-and-cache |
Outros métodos
| Método | O que faz | Receita |
|---|---|---|
$.cookie(name, value, expiration) | Lê um cookie, ou escreve um quando passa um valor. | headers-and-cookies |
$.csrf() | Cria um token CSRF para este cliente. | csrf-protection |
$.hostname(path) | O endereço deste servidor: protocolo, anfitrião e o caminho que passa. | restbuilder |
$.action(name, model) | Executa uma ação com este pedido (utilizador, query e params). | calling-actions-from-code |
$.transform(name, value, callback) | Executa uma transformação com este pedido. | transforms |
$.authorize(callback) | Executa AUTH() para este pedido e define $.user; devolve uma promessa quando não há callback. | controller-completion-and-cache |
$.notmodified(date) | Responde 304 e devolve true quando o pedido tem o cabeçalho if-modified-since com essa data. | controller-completion-and-cache |
$.httpcache(date) | Define os cabeçalhos de cache e last-modified da resposta. | controller-completion-and-cache |
$.clear() | Remove os ficheiros temporários do carregamento. São removidos de qualquer forma quando o pedido termina. | file-upload |
$.autoclear(false) | Mantém os ficheiros carregados depois do pedido, para os poder usar mais tarde. | upload-lifecycle-and-href |
$.custom() | Diz ao framework que responde você mesmo através de $.res: não enviará nada. | controller-completion-and-cache |
$.href(key, value) | Use QUERIFY() como na receita ligada, o helper nativo testado para links com query. | upload-lifecycle-and-href |
$.flush(), $.resume(), $.free(), $.cancel() | Métodos internos: não os chame. |
O exemplo responde com as propriedades e chama os métodos que não precisam de preparação.
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');
}
}