ForgeDokumentation
de

Dokumentation

Das Objekt eines Total.js 5 Handlers

Total.js 5 · total5@0.0.19 referencecontrollerresponses Mit Total.js 5 ausgeführt

Ein Routen-Handler erhält ein Objekt, auf dieser Seite $ geschrieben. Es beschreibt die Anfrage und beantwortet sie. Antworte nur einmal: Nach $.json(), $.html() oder einer anderen Antwort ist die Anfrage beendet.

Eigenschaften

EigenschaftTypWas es ist
$.urlstringDer Pfad der Anfrage ohne Query-String.
$.methodstringGET, POST...
$.queryobjectDer Query-String, geparst.
$.paramsobjectDie {name}-Segmente der Route.
$.bodyobjectDer Body, geparst nach seinem Content-Type (JSON, URL-kodiertes Formular, XML oder Multipart-Felder).
$.filesarrayDie hochgeladenen Dateien einer Multipart-Anfrage.
$.headersobjectDie Header der Anfrage mit Namen in Kleinbuchstaben.
$.ipstringDie IP-Adresse; die erste Adresse aus x-forwarded-for, wenn der Header existiert.
$.hoststringDer Header host.
$.referrerstringDer Header referer.
$.protocolstringhttp oder https (auch wenn ein Proxy es in x-forwarded-proto angibt).
$.extstringDie Endung der URL ohne Punkt ($.extension ist dasselbe).
$.xhrbooleantrue, wenn der Header x-requested-with XMLHttpRequest ist.
$.mobilebooleantrue, wenn der User-Agent wie ein mobiler Browser aussieht.
$.robotbooleantrue, wenn der User-Agent wie ein Crawler aussieht.
$.uastringEin kurzer Name von Browser und System, etwa iPhone Safari oder Windows Chrome.
$.userobjectDer Benutzer, den AUTH() freigegeben hat, oder nichts.
$.languagestringDie Sprache, die LOCALIZE() gewählt hat.
$.datatypestringjson, urlencoded, multipart, xml, text oder binary: der Typ des Bodys der Anfrage.
$.responseobjectWas gesendet wird: status, headers und value. Ändere $.response.status und $.response.headers, bevor du antwortest.
$.req, $.resobjectsDie Node.js-Anfrage und -Antwort.

Methoden, die antworten

MethodeWas sie tutRezept
$.json(value)Antwortet mit JSON.responses
$.jsonstring(text)Antwortet mit einem Text, der bereits JSON ist, ohne ihn erneut zu serialisieren.controller-completion-and-cache
$.html(text)Antwortet mit HTML.responses
$.plain(text)Antwortet mit reinem Text ($.text ist dasselbe).responses
$.xml(text)Antwortet mit XML.responses
$.empty()Antwortet mit Status 204 und ohne Body.responses
$.redirect(url, permanent)Leitet um (302, oder 301, wenn permanent true ist).responses
$.binary(buffer, type, name)Antwortet mit Bytes und einem Content-Type.responses
$.file(path, name)Sendet eine Datei von der Festplatte.file-download
$.stream(type, stream, name)Sendet einen lesbaren Stream.file-download
$.filefs(storage, id)Sendet eine Datei aus einem FILESTORAGE.filestorage
$.image(options)Erzeugt und sendet ein Bild auf Anfrage.images
$.view(name, model)Rendert eine View mit dem Layout und antwortet damit.views-and-layouts
$.layout(name)Wählt ein anderes Layout für das nächste $.view().view-sections
$.proxy(url)Leitet die Anfrage an eine andere URL weiter und antwortet mit deren Antwort.proxy
$.respond(value)Antwortet im Format von $.response.output (json, wenn nicht gesetzt).controller-completion-and-cache
$.invalid(value)Antwortet mit einem Fehler: einem Text, einem Statuscode wie 404 oder einem ErrorBuilder.actions-crud
$.fallback(code)Antwortet mit der Seite eines Fehlercodes, der eigenen, wenn ROUTE('#404') existiert.error-pages
$.success(value)Antwortet { "success": true }; value wird hinzugefügt.responses
$.callback(err, value)Bei einem Fehler antwortet es $.invalid(err), sonst $.json(value), oder $.success(), wenn value undefined ist. Ohne Argumente liefert es eine Funktion (err, response), die dasselbe tut.actions-crud
$.successful(fn)Liefert eine Funktion (err, a, b, c): Bei einem Fehler antwortet sie $.invalid(err), sonst ruft sie fn(a, b, c) auf.controller-completion-and-cache
$.done(arg)Liefert eine Funktion (err, response): Bei einem Fehler antwortet sie $.invalid(err), sonst mit dem Erfolgsobjekt.controller-completion-and-cache

Weitere Methoden

MethodeWas sie tutRezept
$.cookie(name, value, expiration)Liest ein Cookie oder schreibt eines, wenn du einen Wert übergibst.headers-and-cookies
$.csrf()Erzeugt ein CSRF-Token für diesen Client.csrf-protection
$.hostname(path)Die Adresse dieses Servers: Protokoll, Host und der übergebene Pfad.restbuilder
$.action(name, model)Führt eine Action mit dieser Anfrage aus (Benutzer, Query und Params).calling-actions-from-code
$.transform(name, value, callback)Führt eine Transformation mit dieser Anfrage aus.transforms
$.authorize(callback)Führt AUTH() für diese Anfrage aus und setzt $.user; ohne Callback liefert es ein Promise.controller-completion-and-cache
$.notmodified(date)Antwortet 304 und liefert true, wenn die Anfrage den Header if-modified-since mit diesem Datum hat.controller-completion-and-cache
$.httpcache(date)Setzt die Cache-Header und last-modified der Antwort.controller-completion-and-cache
$.clear()Entfernt die temporären Dateien des Uploads. Sie werden ohnehin am Ende der Anfrage entfernt.file-upload
$.autoclear(false)Behält die hochgeladenen Dateien nach der Anfrage, damit du sie später verwenden kannst.upload-lifecycle-and-href
$.custom()Teilt dem Framework mit, dass du selbst über $.res antwortest: Es sendet nichts.controller-completion-and-cache
$.href(key, value)Verwenden Sie QUERIFY() wie im verlinkten Rezept, dem getesteten nativen Helfer für Query-Links.upload-lifecycle-and-href
$.flush(), $.resume(), $.free(), $.cancel()Interne Methoden: nicht aufrufen.

Das Beispiel antwortet mit den Eigenschaften und ruft die Methoden auf, die keine Vorbereitung brauchen.

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