ForgeDocumentazione
it

Documentazione

L'oggetto di un Total.js 5

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

Un handler di route riceve un oggetto, scritto $ in questo sito. Descrive la richiesta e vi risponde. Rispondi una sola volta: dopo $.json(), $.html() o qualsiasi altra risposta, la richiesta è terminata.

Proprietà

ProprietàTipoCos'è
$.urlstringIl percorso della richiesta, senza la query string.
$.methodstringGET, POST...
$.queryobjectLa query string, analizzata.
$.paramsobjectI segmenti {name} della route.
$.bodyobjectIl corpo, analizzato in base al tipo di contenuto (JSON, form URL-encoded, XML o campi multipart).
$.filesarrayI file caricati di una richiesta multipart.
$.headersobjectGli header della richiesta, con nomi in minuscolo.
$.ipstringL'indirizzo IP; il primo indirizzo di x-forwarded-for quando l'header esiste.
$.hoststringL'header host.
$.referrerstringL'header referer.
$.protocolstringhttp o https (anche quando un proxy lo indica in x-forwarded-proto).
$.extstringL'estensione dell'URL, senza il punto ($.extension è lo stesso).
$.xhrbooleantrue quando l'header x-requested-with è XMLHttpRequest.
$.mobilebooleantrue quando lo user agent sembra un browser mobile.
$.robotbooleantrue quando lo user agent sembra un crawler.
$.uastringUn nome breve del browser e del sistema, come iPhone Safari o Windows Chrome.
$.userobjectL'utente approvato da AUTH(), oppure nulla.
$.languagestringLa lingua scelta da LOCALIZE().
$.datatypestringjson, urlencoded, multipart, xml, text o binary: il tipo del corpo della richiesta.
$.responseobjectCiò che verrà inviato: status, headers e value. Cambia $.response.status e $.response.headers prima di rispondere.
$.req, $.resobjectsLa richiesta e la risposta di Node.js.

Metodi che rispondono

MetodoCosa faRicetta
$.json(value)Risponde con JSON.responses
$.jsonstring(text)Risponde con un testo che è già JSON, senza serializzarlo di nuovo.controller-completion-and-cache
$.html(text)Risponde con HTML.responses
$.plain(text)Risponde con testo semplice ($.text è lo stesso).responses
$.xml(text)Risponde con XML.responses
$.empty()Risponde con stato 204 e senza corpo.responses
$.redirect(url, permanent)Reindirizza (302, o 301 quando permanent è true).responses
$.binary(buffer, type, name)Risponde con byte e un tipo di contenuto.responses
$.file(path, name)Invia un file dal disco.file-download
$.stream(type, stream, name)Invia uno stream leggibile.file-download
$.filefs(storage, id)Invia un file di un FILESTORAGE.filestorage
$.image(options)Crea e invia un'immagine su richiesta.images
$.view(name, model)Renderizza una vista con il layout e risponde con essa.views-and-layouts
$.layout(name)Sceglie un altro layout per il prossimo $.view().view-sections
$.proxy(url)Inoltra la richiesta a un altro URL e risponde con la sua risposta.proxy
$.respond(value)Risponde nel formato di $.response.output (json quando non è impostato).controller-completion-and-cache
$.invalid(value)Risponde con un errore: un testo, un codice di stato come 404 o un ErrorBuilder.actions-crud
$.fallback(code)Risponde con la pagina di un codice di errore, quella personalizzata quando esiste ROUTE('#404').error-pages
$.success(value)Risponde { "success": true }; value viene aggiunto.responses
$.callback(err, value)Con un errore risponde $.invalid(err), altrimenti $.json(value), oppure $.success() quando value è undefined. Senza argomenti restituisce una funzione (err, response) che fa lo stesso.actions-crud
$.successful(fn)Restituisce una funzione (err, a, b, c): con un errore risponde $.invalid(err), altrimenti chiama fn(a, b, c).controller-completion-and-cache
$.done(arg)Restituisce una funzione (err, response): con un errore risponde $.invalid(err), altrimenti risponde con l'oggetto di successo.controller-completion-and-cache

Altri metodi

MetodoCosa faRicetta
$.cookie(name, value, expiration)Legge un cookie, o ne scrive uno quando passi un valore.headers-and-cookies
$.csrf()Crea un token CSRF per questo client.csrf-protection
$.hostname(path)L'indirizzo di questo server: protocollo, host e il percorso che passi.restbuilder
$.action(name, model)Esegue un'azione con questa richiesta (utente, query e params).calling-actions-from-code
$.transform(name, value, callback)Esegue una trasformazione con questa richiesta.transforms
$.authorize(callback)Esegue AUTH() per questa richiesta e imposta $.user; restituisce una promise quando non c'è callback.controller-completion-and-cache
$.notmodified(date)Risponde 304 e restituisce true quando la richiesta ha l'header if-modified-since con quella data.controller-completion-and-cache
$.httpcache(date)Imposta gli header di cache e last-modified della risposta.controller-completion-and-cache
$.clear()Rimuove i file temporanei dell'upload. Vengono comunque rimossi quando la richiesta termina.file-upload
$.autoclear(false)Mantiene i file caricati dopo la richiesta, così puoi usarli in seguito.upload-lifecycle-and-href
$.custom()Dice al framework che rispondi tu stesso tramite $.res: non invierà nulla.controller-completion-and-cache
$.href(key, value)Usa QUERIFY() come nella ricetta collegata, l’helper nativo testato per i link con query.upload-lifecycle-and-href
$.flush(), $.resume(), $.free(), $.cancel()Metodi interni: non chiamarli.

L'esempio risponde con le proprietà e chiama i metodi che non richiedono preparazione.

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