ForgeDocumentação
pt

Documentação

O objeto de um Total.js 5

Total.js 5 · total5@0.0.19 referencecontrollerresponses Executada com o 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

PropriedadeTipoO que é
$.urlstringO caminho do pedido, sem a query string.
$.methodstringGET, POST...
$.queryobjectA query string, analisada.
$.paramsobjectOs segmentos {name} da rota.
$.bodyobjectO corpo, analisado segundo o seu tipo de conteúdo (JSON, formulário URL-encoded, XML ou campos multipart).
$.filesarrayOs ficheiros carregados de um pedido multipart.
$.headersobjectOs cabeçalhos do pedido, com nomes em minúsculas.
$.ipstringO endereço IP; o primeiro endereço de x-forwarded-for quando o cabeçalho existe.
$.hoststringO cabeçalho host.
$.referrerstringO cabeçalho referer.
$.protocolstringhttp ou https (também quando um proxy o indica em x-forwarded-proto).
$.extstringA extensão do URL, sem o ponto ($.extension é o mesmo).
$.xhrbooleantrue quando o cabeçalho x-requested-with é XMLHttpRequest.
$.mobilebooleantrue quando o user agent parece um navegador móvel.
$.robotbooleantrue quando o user agent parece um rastreador.
$.uastringUm nome curto do navegador e do sistema, como iPhone Safari ou Windows Chrome.
$.userobjectO utilizador que AUTH() aprovou, ou nada.
$.languagestringA língua que LOCALIZE() escolheu.
$.datatypestringjson, urlencoded, multipart, xml, text ou binary: o tipo do corpo do pedido.
$.responseobjectO que será enviado: status, headers e value. Altere $.response.status e $.response.headers antes de responder.
$.req, $.resobjectsO pedido e a resposta do Node.js.

Métodos que respondem

MétodoO que fazReceita
$.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étodoO que fazReceita
$.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.

controllers/api.js
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');
	}
}