ForgeDocumentación
es

Documentación

Referencia del controlador de Total.js 5

Total.js 5 · total5@0.0.19 referencecontrollerresponses Ejecutada con Total.js 5

Un manejador de ruta recibe un objeto, escrito $ en este sitio. Describe la petición y la responde. Responde una sola vez: después de $.json(), $.html() o cualquier otra respuesta, la petición ha terminado.

Propiedades

PropiedadTipoQué es
$.urlstringLa ruta de la petición, sin la cadena de consulta.
$.methodstringGET, POST...
$.queryobjectLa cadena de consulta, analizada.
$.paramsobjectLos segmentos {name} de la ruta.
$.bodyobjectEl cuerpo, analizado según su tipo de contenido (JSON, formulario URL-encoded, XML o campos multipart).
$.filesarrayLos archivos subidos de una petición multipart.
$.headersobjectLas cabeceras de la petición, con nombres en minúsculas.
$.ipstringLa dirección IP; la primera dirección de x-forwarded-for cuando existe la cabecera.
$.hoststringLa cabecera host.
$.referrerstringLa cabecera referer.
$.protocolstringhttp o https (también cuando un proxy lo indica en x-forwarded-proto).
$.extstringLa extensión de la URL, sin el punto ($.extension es lo mismo).
$.xhrbooleantrue cuando la cabecera x-requested-with es XMLHttpRequest.
$.mobilebooleantrue cuando el user agent parece un navegador móvil.
$.robotbooleantrue cuando el user agent parece un rastreador.
$.uastringUn nombre corto del navegador y el sistema, como iPhone Safari o Windows Chrome.
$.userobjectEl usuario que AUTH() aprobó, o nada.
$.languagestringEl idioma que eligió LOCALIZE().
$.datatypestringjson, urlencoded, multipart, xml, text o binary: el tipo del cuerpo de la petición.
$.responseobjectLo que se enviará: status, headers y value. Cambia $.response.status y $.response.headers antes de responder.
$.req, $.resobjectsLa petición y la respuesta de Node.js.

Métodos que responden

MétodoQué haceReceta
$.json(value)Responde con JSON.responses
$.jsonstring(text)Responde con un texto que ya es JSON, sin volver a serializarlo.controller-completion-and-cache
$.html(text)Responde con HTML.responses
$.plain(text)Responde con texto plano ($.text es lo mismo).responses
$.xml(text)Responde con XML.responses
$.empty()Responde con estado 204 y sin cuerpo.responses
$.redirect(url, permanent)Redirige (302, o 301 cuando permanent es true).responses
$.binary(buffer, type, name)Responde con bytes y un tipo de contenido.responses
$.file(path, name)Envía un archivo del disco.file-download
$.stream(type, stream, name)Envía un stream legible.file-download
$.filefs(storage, id)Envía un archivo de un FILESTORAGE.filestorage
$.image(options)Crea y envía una imagen bajo demanda.images
$.view(name, model)Renderiza una vista con el layout y responde con ella.views-and-layouts
$.layout(name)Elige otro layout para el siguiente $.view().view-sections
$.proxy(url)Reenvía la petición a otra URL y responde con su respuesta.proxy
$.respond(value)Responde en el formato de $.response.output (json cuando no está definido).controller-completion-and-cache
$.invalid(value)Responde con un error: un texto, un código de estado como 404 o un ErrorBuilder.actions-crud
$.fallback(code)Responde con la página de un código de error, la personalizada cuando existe ROUTE('#404').error-pages
$.success(value)Responde { "success": true }; value se le añade.responses
$.callback(err, value)Con un error responde $.invalid(err), si no $.json(value), o $.success() cuando value es undefined. Sin argumentos devuelve una función (err, response) que hace lo mismo.actions-crud
$.successful(fn)Devuelve una función (err, a, b, c): con un error responde $.invalid(err), si no llama a fn(a, b, c).controller-completion-and-cache
$.done(arg)Devuelve una función (err, response): con un error responde $.invalid(err), si no responde con el objeto de éxito.controller-completion-and-cache

Otros métodos

MétodoQué haceReceta
$.cookie(name, value, expiration)Lee una cookie, o escribe una cuando pasas un valor.headers-and-cookies
$.csrf()Crea un token CSRF para este cliente.csrf-protection
$.hostname(path)La dirección de este servidor: protocolo, host y la ruta que pasas.restbuilder
$.action(name, model)Ejecuta una acción con esta petición (usuario, query y params).calling-actions-from-code
$.transform(name, value, callback)Ejecuta una transformación con esta petición.transforms
$.authorize(callback)Ejecuta AUTH() para esta petición y establece $.user; devuelve una promesa cuando no hay callback.controller-completion-and-cache
$.notmodified(date)Responde 304 y devuelve true cuando la petición tiene la cabecera if-modified-since con esa fecha.controller-completion-and-cache
$.httpcache(date)Establece las cabeceras de caché y last-modified de la respuesta.controller-completion-and-cache
$.clear()Elimina los archivos temporales de la subida. Se eliminan de todos modos cuando termina la petición.file-upload
$.autoclear(false)Conserva los archivos subidos después de la petición, para que puedas usarlos más tarde.upload-lifecycle-and-href
$.custom()Indica al framework que respondes tú mismo a través de $.res: no enviará nada.controller-completion-and-cache
$.href(key, value)Usa QUERIFY() como en la receta enlazada, el helper nativo probado para enlaces con consulta.upload-lifecycle-and-href
$.flush(), $.resume(), $.free(), $.cancel()Métodos internos: no los llames.

El ejemplo responde con las propiedades y llama a los métodos que no necesitan preparación.

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');
	}
}