# A Total.js 5 kereskedő tárgya

> Használja az irányító tulajdonságait és módszereit, amelyeket egy útkereskedő kap.

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

Az útvonalkezelő egy objektumot kap, amelyet ezen az oldalon `$`-ként írunk. Leírja a kérést, és válaszol rá. **Csak egyszer** válaszolj: a `$.json()`, a `$.html()` vagy bármely más válasz után a kérés befejeződött.

## Tulajdonságok

| Tulajdonság | Típus | Mi ez |
|---|---|---|
| `$.url` | string | A kérés útvonala a lekérdezési karakterlánc nélkül. |
| `$.method` | string | `GET`, `POST`... |
| `$.query` | object | A lekérdezési karakterlánc, értelmezve. |
| `$.params` | object | Az útvonal `{name}` szegmensei. |
| `$.body` | object | A törzs, a tartalomtípus szerint értelmezve (JSON, URL-kódolt űrlap, XML vagy multipart mezők). |
| `$.files` | array | Egy multipart kérés feltöltött fájljai. |
| `$.headers` | object | A kérés fejlécei, kisbetűs nevekkel. |
| `$.ip` | string | Az IP-cím; az `x-forwarded-for` első címe, ha a fejléc létezik. |
| `$.host` | string | A `host` fejléc. |
| `$.referrer` | string | A `referer` fejléc. |
| `$.protocol` | string | `http` vagy `https` (akkor is, ha egy proxy ezt az `x-forwarded-proto`-ban jelzi). |
| `$.ext` | string | Az URL kiterjesztése pont nélkül (a `$.extension` ugyanaz). |
| `$.xhr` | boolean | `true`, ha az `x-requested-with` fejléc értéke `XMLHttpRequest`. |
| `$.mobile` | boolean | `true`, ha a user agent mobil böngészőnek tűnik. |
| `$.robot` | boolean | `true`, ha a user agent keresőrobotnak tűnik. |
| `$.ua` | string | A böngésző és a rendszer rövid neve, például `iPhone Safari` vagy `Windows Chrome`. |
| `$.user` | object | A felhasználó, akit az `AUTH()` jóváhagyott, vagy semmi. |
| `$.language` | string | A nyelv, amelyet a `LOCALIZE()` választott. |
| `$.datatype` | string | `json`, `urlencoded`, `multipart`, `xml`, `text` vagy `binary`: a kérés törzsének típusa. |
| `$.response` | object | Amit elküldünk: `status`, `headers` és `value`. Válasz előtt módosítsd a `$.response.status` és a `$.response.headers` értékét. |
| `$.req`, `$.res` | objects | A Node.js kérés és válasz. |

## Válaszoló metódusok

| Metódus | Mit csinál | Recept |
|---|---|---|
| `$.json(value)` | JSON-nal válaszol. | [responses](/en/total5/responses/) |
| `$.jsonstring(text)` | Olyan szöveggel válaszol, amely már JSON, újabb szerializálás nélkül. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.html(text)` | HTML-lel válaszol. | [responses](/en/total5/responses/) |
| `$.plain(text)` | Egyszerű szöveggel válaszol (a `$.text` ugyanaz). | [responses](/en/total5/responses/) |
| `$.xml(text)` | XML-lel válaszol. | [responses](/en/total5/responses/) |
| `$.empty()` | 204-es állapottal és törzs nélkül válaszol. | [responses](/en/total5/responses/) |
| `$.redirect(url, permanent)` | Átirányít (302, vagy 301, ha a `permanent` true). | [responses](/en/total5/responses/) |
| `$.binary(buffer, type, name)` | Bájtokkal és tartalomtípussal válaszol. | [responses](/en/total5/responses/) |
| `$.file(path, name)` | Fájlt küld a lemezről. | [file-download](/en/total5/file-download/) |
| `$.stream(type, stream, name)` | Olvasható streamet küld. | [file-download](/en/total5/file-download/) |
| `$.filefs(storage, id)` | Egy `FILESTORAGE` fájlját küldi. | [filestorage](/en/total5/filestorage/) |
| `$.image(options)` | Igény szerint képet hoz létre és küld. | [images](/en/total5/images/) |
| `$.view(name, model)` | Nézetet renderel a layouttal, és azzal válaszol. | [views-and-layouts](/en/total5/views-and-layouts/) |
| `$.layout(name)` | Másik layoutot választ a következő `$.view()`-hoz. | [view-sections](/en/total5/view-sections/) |
| `$.proxy(url)` | Továbbítja a kérést egy másik URL-re, és annak válaszával válaszol. | [proxy](/en/total5/proxy/) |
| `$.respond(value)` | A `$.response.output` formátumában válaszol (`json`, ha nincs beállítva). | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.invalid(value)` | Hibával válaszol: szöveggel, állapotkóddal, például `404`-gyel, vagy `ErrorBuilder`-rel. | [actions-crud](/en/total5/actions-crud/) |
| `$.fallback(code)` | Egy hibakód oldalával válaszol, az egyéni oldallal, ha létezik a `ROUTE('#404')`. | [error-pages](/en/total5/error-pages/) |
| `$.success(value)` | `{ "success": true }`-val válaszol; a `value` hozzáadódik. | [responses](/en/total5/responses/) |
| `$.callback(err, value)` | Hiba esetén `$.invalid(err)`-rel válaszol, különben `$.json(value)`-val, vagy `$.success()`-szel, ha a `value` `undefined`. Argumentumok nélkül egy `(err, response)` függvényt ad vissza, amely ugyanezt teszi. | [actions-crud](/en/total5/actions-crud/) |
| `$.successful(fn)` | Egy `(err, a, b, c)` függvényt ad vissza: hiba esetén `$.invalid(err)`-rel válaszol, különben meghívja az `fn(a, b, c)`-t. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.done(arg)` | Egy `(err, response)` függvényt ad vissza: hiba esetén `$.invalid(err)`-rel válaszol, különben a sikeres objektummal. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |

## Egyéb metódusok

| Metódus | Mit csinál | Recept |
|---|---|---|
| `$.cookie(name, value, expiration)` | Beolvas egy sütit, vagy ír egyet, ha értéket adsz át. | [headers-and-cookies](/en/total5/headers-and-cookies/) |
| `$.csrf()` | CSRF-tokent hoz létre ennek a kliensnek. | [csrf-protection](/en/total5/csrf-protection/) |
| `$.hostname(path)` | Ennek a szervernek a címe: protokoll, host és az átadott útvonal. | [restbuilder](/en/total5/restbuilder/) |
| `$.action(name, model)` | Műveletet futtat ezzel a kéréssel (felhasználó, query és params). | [calling-actions-from-code](/en/total5/calling-actions-from-code/) |
| `$.transform(name, value, callback)` | Átalakítást futtat ezzel a kéréssel. | [transforms](/en/total5/transforms/) |
| `$.authorize(callback)` | Lefuttatja az `AUTH()`-ot ehhez a kéréshez, és beállítja a `$.user`-t; visszahívás nélkül promise-t ad vissza. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.notmodified(date)` | 304-gyel válaszol, és `true`-t ad vissza, ha a kérésben az `if-modified-since` fejléc ezzel a dátummal szerepel. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.httpcache(date)` | Beállítja a válasz gyorsítótár-fejléceit és a `last-modified`-et. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.clear()` | Eltávolítja a feltöltés ideiglenes fájljait. A kérés végén úgyis eltávolítja őket a rendszer. | [file-upload](/en/total5/file-upload/) |
| `$.autoclear(false)` | Megtartja a feltöltött fájlokat a kérés után, hogy később használhasd őket. | [upload-lifecycle-and-href](/en/total5/upload-lifecycle-and-href/) |
| `$.custom()` | Közli a keretrendszerrel, hogy te magad válaszolsz a `$.res`-en keresztül: nem küld semmit. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.href(key, value)` | Használd a `QUERIFY()` függvényt a hivatkozott receptben látottak szerint, ez a tesztelt natív segéd lekérdezéses hivatkozásokhoz. | [upload-lifecycle-and-href](/en/total5/upload-lifecycle-and-href/) |
| `$.flush()`, `$.resume()`, `$.free()`, `$.cancel()` | Belső metódusok: ne hívd őket. | - |

A példa a tulajdonságokkal válaszol, és meghívja azokat a metódusokat, amelyek nem igényelnek előkészítést.

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