Das Objekt eines Total.js 5 Handlers
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
| Eigenschaft | Typ | Was es ist |
|---|---|---|
$.url | string | Der Pfad der Anfrage ohne Query-String. |
$.method | string | GET, POST... |
$.query | object | Der Query-String, geparst. |
$.params | object | Die {name}-Segmente der Route. |
$.body | object | Der Body, geparst nach seinem Content-Type (JSON, URL-kodiertes Formular, XML oder Multipart-Felder). |
$.files | array | Die hochgeladenen Dateien einer Multipart-Anfrage. |
$.headers | object | Die Header der Anfrage mit Namen in Kleinbuchstaben. |
$.ip | string | Die IP-Adresse; die erste Adresse aus x-forwarded-for, wenn der Header existiert. |
$.host | string | Der Header host. |
$.referrer | string | Der Header referer. |
$.protocol | string | http oder https (auch wenn ein Proxy es in x-forwarded-proto angibt). |
$.ext | string | Die Endung der URL ohne Punkt ($.extension ist dasselbe). |
$.xhr | boolean | true, wenn der Header x-requested-with XMLHttpRequest ist. |
$.mobile | boolean | true, wenn der User-Agent wie ein mobiler Browser aussieht. |
$.robot | boolean | true, wenn der User-Agent wie ein Crawler aussieht. |
$.ua | string | Ein kurzer Name von Browser und System, etwa iPhone Safari oder Windows Chrome. |
$.user | object | Der Benutzer, den AUTH() freigegeben hat, oder nichts. |
$.language | string | Die Sprache, die LOCALIZE() gewählt hat. |
$.datatype | string | json, urlencoded, multipart, xml, text oder binary: der Typ des Bodys der Anfrage. |
$.response | object | Was gesendet wird: status, headers und value. Ändere $.response.status und $.response.headers, bevor du antwortest. |
$.req, $.res | objects | Die Node.js-Anfrage und -Antwort. |
Methoden, die antworten
| Methode | Was sie tut | Rezept |
|---|---|---|
$.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
| Methode | Was sie tut | Rezept |
|---|---|---|
$.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.
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');
}
}