# $ objektet av en Total.js 5 handlare

> Använd de egenskaper och metoder som kontrolleraren mottar av en vägtrafik.

Framework: total5
Product: Total.js 5 (total5@0.0.19)
Language: sv
Content-SHA256: ee44d0bd71a1422e472b335d231fb4e055af780617e2b515d89c697a5de8f5c8
Snapshot: c0700e321579725c5cf4f5ace1ad7d2866d1b4f93c24a63c0b41b6b7998e976c
Sources: total5-installed@total5@0.0.19
Review: not-recorded

En route-hanterare får ett objekt, skrivet `$` på den här webbplatsen. Det beskriver begäran och svarar på den. Svara **en gång**: efter `$.json()`, `$.html()` eller något annat svar är begäran klar.

## Egenskaper

| Egenskap | Typ | Vad det är |
|---|---|---|
| `$.url` | string | Begärans sökväg, utan frågesträngen. |
| `$.method` | string | `GET`, `POST`... |
| `$.query` | object | Frågesträngen, tolkad. |
| `$.params` | object | Routens `{name}`-segment. |
| `$.body` | object | Kroppen, tolkad efter sin innehållstyp (JSON, URL-kodat formulär, XML eller multipart-fält). |
| `$.files` | array | De uppladdade filerna i en multipart-begäran. |
| `$.headers` | object | Begärans huvuden, med namn i små bokstäver. |
| `$.ip` | string | IP-adressen; den första adressen i `x-forwarded-for` när huvudet finns. |
| `$.host` | string | Huvudet `host`. |
| `$.referrer` | string | Huvudet `referer`. |
| `$.protocol` | string | `http` eller `https` (även när en proxy anger det i `x-forwarded-proto`). |
| `$.ext` | string | URL:ens filändelse, utan punkt (`$.extension` är samma sak). |
| `$.xhr` | boolean | `true` när huvudet `x-requested-with` är `XMLHttpRequest`. |
| `$.mobile` | boolean | `true` när user agent ser ut som en mobil webbläsare. |
| `$.robot` | boolean | `true` när user agent ser ut som en sökrobot. |
| `$.ua` | string | Ett kort namn på webbläsare och system, som `iPhone Safari` eller `Windows Chrome`. |
| `$.user` | object | Användaren som `AUTH()` godkänt, eller ingenting. |
| `$.language` | string | Språket som `LOCALIZE()` valde. |
| `$.datatype` | string | `json`, `urlencoded`, `multipart`, `xml`, `text` eller `binary`: typen på begärans kropp. |
| `$.response` | object | Vad som ska skickas: `status`, `headers` och `value`. Ändra `$.response.status` och `$.response.headers` innan du svarar. |
| `$.req`, `$.res` | objects | Node.js-begäran och -svaret. |

## Metoder som svarar

| Metod | Vad den gör | Recept |
|---|---|---|
| `$.json(value)` | Svarar med JSON. | [responses](/en/total5/responses/) |
| `$.jsonstring(text)` | Svarar med en text som redan är JSON, utan att serialisera den igen. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.html(text)` | Svarar med HTML. | [responses](/en/total5/responses/) |
| `$.plain(text)` | Svarar med ren text (`$.text` är samma sak). | [responses](/en/total5/responses/) |
| `$.xml(text)` | Svarar med XML. | [responses](/en/total5/responses/) |
| `$.empty()` | Svarar med status 204 och utan kropp. | [responses](/en/total5/responses/) |
| `$.redirect(url, permanent)` | Omdirigerar (302, eller 301 när `permanent` är true). | [responses](/en/total5/responses/) |
| `$.binary(buffer, type, name)` | Svarar med byte och en innehållstyp. | [responses](/en/total5/responses/) |
| `$.file(path, name)` | Skickar en fil från disk. | [file-download](/en/total5/file-download/) |
| `$.stream(type, stream, name)` | Skickar en läsbar ström. | [file-download](/en/total5/file-download/) |
| `$.filefs(storage, id)` | Skickar en fil från en `FILESTORAGE`. | [filestorage](/en/total5/filestorage/) |
| `$.image(options)` | Skapar och skickar en bild vid behov. | [images](/en/total5/images/) |
| `$.view(name, model)` | Renderar en vy med layouten och svarar med den. | [views-and-layouts](/en/total5/views-and-layouts/) |
| `$.layout(name)` | Väljer en annan layout för nästa `$.view()`. | [view-sections](/en/total5/view-sections/) |
| `$.proxy(url)` | Vidarebefordrar begäran till en annan URL och svarar med dess svar. | [proxy](/en/total5/proxy/) |
| `$.respond(value)` | Svarar i formatet i `$.response.output` (`json` när det inte är satt). | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.invalid(value)` | Svarar med ett fel: en text, en statuskod som `404` eller en `ErrorBuilder`. | [actions-crud](/en/total5/actions-crud/) |
| `$.fallback(code)` | Svarar med sidan för en felkod, den anpassade när `ROUTE('#404')` finns. | [error-pages](/en/total5/error-pages/) |
| `$.success(value)` | Svarar `{ "success": true }`; `value` läggs till. | [responses](/en/total5/responses/) |
| `$.callback(err, value)` | Vid ett fel svarar den `$.invalid(err)`, annars `$.json(value)`, eller `$.success()` när `value` är `undefined`. Utan argument returnerar den en funktion `(err, response)` som gör samma sak. | [actions-crud](/en/total5/actions-crud/) |
| `$.successful(fn)` | Returnerar en funktion `(err, a, b, c)`: vid ett fel svarar den `$.invalid(err)`, annars anropar den `fn(a, b, c)`. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.done(arg)` | Returnerar en funktion `(err, response)`: vid ett fel svarar den `$.invalid(err)`, annars med framgångsobjektet. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |

## Andra metoder

| Metod | Vad den gör | Recept |
|---|---|---|
| `$.cookie(name, value, expiration)` | Läser en cookie, eller skriver en när du skickar ett värde. | [headers-and-cookies](/en/total5/headers-and-cookies/) |
| `$.csrf()` | Skapar en CSRF-token för den här klienten. | [csrf-protection](/en/total5/csrf-protection/) |
| `$.hostname(path)` | Den här serverns adress: protokoll, värd och sökvägen du skickar. | [restbuilder](/en/total5/restbuilder/) |
| `$.action(name, model)` | Kör en åtgärd med den här begäran (användare, query och params). | [calling-actions-from-code](/en/total5/calling-actions-from-code/) |
| `$.transform(name, value, callback)` | Kör en transformering med den här begäran. | [transforms](/en/total5/transforms/) |
| `$.authorize(callback)` | Kör `AUTH()` för den här begäran och sätter `$.user`; returnerar ett promise när det inte finns någon callback. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.notmodified(date)` | Svarar 304 och returnerar `true` när begäran har huvudet `if-modified-since` med det datumet. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.httpcache(date)` | Sätter cache-huvudena och `last-modified` för svaret. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.clear()` | Tar bort uppladdningens temporära filer. De tas bort ändå när begäran slutar. | [file-upload](/en/total5/file-upload/) |
| `$.autoclear(false)` | Behåller de uppladdade filerna efter begäran, så att du kan använda dem senare. | [upload-lifecycle-and-href](/en/total5/upload-lifecycle-and-href/) |
| `$.custom()` | Talar om för ramverket att du svarar själv via `$.res`: det skickar ingenting. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.href(key, value)` | Använd `QUERIFY()` som i det länkade receptet, den testade inbyggda hjälparen för frågelänkar. | [upload-lifecycle-and-href](/en/total5/upload-lifecycle-and-href/) |
| `$.flush()`, `$.resume()`, `$.free()`, `$.cancel()` | Interna metoder: anropa dem inte. | - |

Exemplet svarar med egenskaperna och anropar de metoder som inte behöver någon förberedelse.

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