ForgeDocumentation
fr

Documentation

L'objet de la Total.js 5

Total.js 5 · total5@0.0.19 referencecontrollerresponses Exécutée avec Total.js 5

Un gestionnaire de route reçoit un objet, écrit $ sur ce site. Il décrit la requête et y répond. Répondez une seule fois : après $.json(), $.html() ou toute autre réponse, la requête est terminée.

Propriétés

PropriétéTypeCe que c'est
$.urlstringLe chemin de la requête, sans la chaîne de requête.
$.methodstringGET, POST...
$.queryobjectLa chaîne de requête, analysée.
$.paramsobjectLes segments {name} de la route.
$.bodyobjectLe corps, analysé selon son type de contenu (JSON, formulaire URL-encodé, XML ou champs multipart).
$.filesarrayLes fichiers téléversés d'une requête multipart.
$.headersobjectLes en-têtes de la requête, avec des noms en minuscules.
$.ipstringL'adresse IP ; la première adresse de x-forwarded-for quand l'en-tête existe.
$.hoststringL'en-tête host.
$.referrerstringL'en-tête referer.
$.protocolstringhttp ou https (aussi quand un proxy l'indique dans x-forwarded-proto).
$.extstringL'extension de l'URL, sans le point ($.extension est identique).
$.xhrbooleantrue quand l'en-tête x-requested-with vaut XMLHttpRequest.
$.mobilebooleantrue quand l'user agent ressemble à un navigateur mobile.
$.robotbooleantrue quand l'user agent ressemble à un robot d'exploration.
$.uastringUn nom court du navigateur et du système, comme iPhone Safari ou Windows Chrome.
$.userobjectL'utilisateur qu'AUTH() a approuvé, ou rien.
$.languagestringLa langue que LOCALIZE() a choisie.
$.datatypestringjson, urlencoded, multipart, xml, text ou binary : le type du corps de la requête.
$.responseobjectCe qui sera envoyé : status, headers et value. Modifiez $.response.status et $.response.headers avant de répondre.
$.req, $.resobjectsLa requête et la réponse Node.js.

Méthodes qui répondent

MéthodeCe qu'elle faitRecette
$.json(value)Répond avec du JSON.responses
$.jsonstring(text)Répond avec un texte qui est déjà du JSON, sans le sérialiser à nouveau.controller-completion-and-cache
$.html(text)Répond avec du HTML.responses
$.plain(text)Répond avec du texte brut ($.text est identique).responses
$.xml(text)Répond avec du XML.responses
$.empty()Répond avec le statut 204 et sans corps.responses
$.redirect(url, permanent)Redirige (302, ou 301 quand permanent est vrai).responses
$.binary(buffer, type, name)Répond avec des octets et un type de contenu.responses
$.file(path, name)Envoie un fichier du disque.file-download
$.stream(type, stream, name)Envoie un flux lisible.file-download
$.filefs(storage, id)Envoie un fichier d'un FILESTORAGE.filestorage
$.image(options)Crée et envoie une image à la demande.images
$.view(name, model)Rend une vue avec le layout et répond avec elle.views-and-layouts
$.layout(name)Choisit un autre layout pour le prochain $.view().view-sections
$.proxy(url)Transmet la requête à une autre URL et répond avec sa réponse.proxy
$.respond(value)Répond au format de $.response.output (json s'il n'est pas défini).controller-completion-and-cache
$.invalid(value)Répond avec une erreur : un texte, un code d'état comme 404 ou un ErrorBuilder.actions-crud
$.fallback(code)Répond avec la page d'un code d'erreur, celle personnalisée quand ROUTE('#404') existe.error-pages
$.success(value)Répond { "success": true } ; value y est ajouté.responses
$.callback(err, value)Avec une erreur, répond $.invalid(err), sinon $.json(value), ou $.success() quand value est undefined. Sans argument, renvoie une fonction (err, response) qui fait la même chose.actions-crud
$.successful(fn)Renvoie une fonction (err, a, b, c) : avec une erreur, elle répond $.invalid(err), sinon elle appelle fn(a, b, c).controller-completion-and-cache
$.done(arg)Renvoie une fonction (err, response) : avec une erreur, elle répond $.invalid(err), sinon avec l'objet de succès.controller-completion-and-cache

Autres méthodes

MéthodeCe qu'elle faitRecette
$.cookie(name, value, expiration)Lit un cookie, ou en écrit un quand vous passez une valeur.headers-and-cookies
$.csrf()Crée un jeton CSRF pour ce client.csrf-protection
$.hostname(path)L'adresse de ce serveur : protocole, hôte et le chemin que vous passez.restbuilder
$.action(name, model)Exécute une action avec cette requête (utilisateur, query et params).calling-actions-from-code
$.transform(name, value, callback)Exécute une transformation avec cette requête.transforms
$.authorize(callback)Exécute AUTH() pour cette requête et définit $.user ; renvoie une promesse quand il n'y a pas de callback.controller-completion-and-cache
$.notmodified(date)Répond 304 et renvoie true quand la requête a l'en-tête if-modified-since avec cette date.controller-completion-and-cache
$.httpcache(date)Définit les en-têtes de cache et last-modified de la réponse.controller-completion-and-cache
$.clear()Supprime les fichiers temporaires du téléversement. Ils sont supprimés de toute façon à la fin de la requête.file-upload
$.autoclear(false)Conserve les fichiers téléversés après la requête, pour les utiliser plus tard.upload-lifecycle-and-href
$.custom()Indique au framework que vous répondez vous-même via $.res : il n'enverra rien.controller-completion-and-cache
$.href(key, value)Utilisez QUERIFY() comme dans la recette liée, l’assistant natif testé pour les liens avec paramètres.upload-lifecycle-and-href
$.flush(), $.resume(), $.free(), $.cancel()Méthodes internes : ne les appelez pas.

L'exemple répond avec les propriétés et appelle les méthodes qui ne nécessitent aucune préparation.

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