# Обектът на долара е Total.js 5 Търговци

> Използвайте свойствата и методите на контролера, получени от маршрутен оператор.

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

Манипулаторът на маршрут получава един обект, на този сайт записван като `$`. Той описва заявката и отговаря на нея. Отговаряйте **само веднъж**: след `$.json()`, `$.html()` или друг отговор заявката е приключила.

## Свойства

| Свойство | Тип | Какво е |
|---|---|---|
| `$.url` | string | Пътят на заявката, без низа на заявката. |
| `$.method` | string | `GET`, `POST`... |
| `$.query` | object | Низът на заявката, анализиран. |
| `$.params` | object | Сегментите `{name}` на маршрута. |
| `$.body` | object | Тялото, анализирано според типа на съдържанието (JSON, URL-encoded форма, XML или multipart полета). |
| `$.files` | array | Качените файлове на multipart заявка. |
| `$.headers` | object | Заглавията на заявката, с имена с малки букви. |
| `$.ip` | string | IP адресът; първият адрес от `x-forwarded-for`, когато заглавието съществува. |
| `$.host` | string | Заглавието `host`. |
| `$.referrer` | string | Заглавието `referer`. |
| `$.protocol` | string | `http` или `https` (и когато прокси го посочва в `x-forwarded-proto`). |
| `$.ext` | string | Разширението на URL адреса, без точката (`$.extension` е същото). |
| `$.xhr` | boolean | `true`, когато заглавието `x-requested-with` е `XMLHttpRequest`. |
| `$.mobile` | boolean | `true`, когато user agent изглежда като мобилен браузър. |
| `$.robot` | boolean | `true`, когато user agent изглежда като crawler. |
| `$.ua` | string | Кратко име на браузъра и системата, например `iPhone Safari` или `Windows Chrome`. |
| `$.user` | object | Потребителят, одобрен от `AUTH()`, или нищо. |
| `$.language` | string | Езикът, избран от `LOCALIZE()`. |
| `$.datatype` | string | `json`, `urlencoded`, `multipart`, `xml`, `text` или `binary`: типът на тялото на заявката. |
| `$.response` | object | Какво ще бъде изпратено: `status`, `headers` и `value`. Променете `$.response.status` и `$.response.headers`, преди да отговорите. |
| `$.req`, `$.res` | objects | Заявката и отговорът на Node.js. |

## Методи, които отговарят

| Метод | Какво прави | Рецепта |
|---|---|---|
| `$.json(value)` | Отговаря с JSON. | [responses](/en/total5/responses/) |
| `$.jsonstring(text)` | Отговаря с текст, който вече е JSON, без да го сериализира отново. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.html(text)` | Отговаря с HTML. | [responses](/en/total5/responses/) |
| `$.plain(text)` | Отговаря с обикновен текст (`$.text` е същото). | [responses](/en/total5/responses/) |
| `$.xml(text)` | Отговаря с XML. | [responses](/en/total5/responses/) |
| `$.empty()` | Отговаря със статус 204 и без тяло. | [responses](/en/total5/responses/) |
| `$.redirect(url, permanent)` | Пренасочва (302, или 301, когато `permanent` е true). | [responses](/en/total5/responses/) |
| `$.binary(buffer, type, name)` | Отговаря с байтове и тип на съдържанието. | [responses](/en/total5/responses/) |
| `$.file(path, name)` | Изпраща файл от диска. | [file-download](/en/total5/file-download/) |
| `$.stream(type, stream, name)` | Изпраща четим поток. | [file-download](/en/total5/file-download/) |
| `$.filefs(storage, id)` | Изпраща файл от `FILESTORAGE`. | [filestorage](/en/total5/filestorage/) |
| `$.image(options)` | Създава и изпраща изображение при поискване. | [images](/en/total5/images/) |
| `$.view(name, model)` | Рендира изглед с layout и отговаря с него. | [views-and-layouts](/en/total5/views-and-layouts/) |
| `$.layout(name)` | Избира друг layout за следващия `$.view()`. | [view-sections](/en/total5/view-sections/) |
| `$.proxy(url)` | Препраща заявката към друг URL и отговаря с неговия отговор. | [proxy](/en/total5/proxy/) |
| `$.respond(value)` | Отговаря във формата на `$.response.output` (`json`, когато не е зададен). | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.invalid(value)` | Отговаря с грешка: текст, код на състоянието като `404` или `ErrorBuilder`. | [actions-crud](/en/total5/actions-crud/) |
| `$.fallback(code)` | Отговаря със страницата на код за грешка, персонализираната, когато съществува `ROUTE('#404')`. | [error-pages](/en/total5/error-pages/) |
| `$.success(value)` | Отговаря `{ "success": true }`; `value` се добавя към него. | [responses](/en/total5/responses/) |
| `$.callback(err, value)` | При грешка отговаря `$.invalid(err)`, иначе `$.json(value)`, или `$.success()`, когато `value` е `undefined`. Без аргументи връща функция `(err, response)`, която прави същото. | [actions-crud](/en/total5/actions-crud/) |
| `$.successful(fn)` | Връща функция `(err, a, b, c)`: при грешка отговаря `$.invalid(err)`, иначе извиква `fn(a, b, c)`. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.done(arg)` | Връща функция `(err, response)`: при грешка отговаря `$.invalid(err)`, иначе отговаря с обекта за успех. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |

## Други методи

| Метод | Какво прави | Рецепта |
|---|---|---|
| `$.cookie(name, value, expiration)` | Чете бисквитка или записва такава, когато подадете стойност. | [headers-and-cookies](/en/total5/headers-and-cookies/) |
| `$.csrf()` | Създава CSRF токен за този клиент. | [csrf-protection](/en/total5/csrf-protection/) |
| `$.hostname(path)` | Адресът на този сървър: протокол, хост и пътят, който подавате. | [restbuilder](/en/total5/restbuilder/) |
| `$.action(name, model)` | Изпълнява действие с тази заявка (потребител, query и params). | [calling-actions-from-code](/en/total5/calling-actions-from-code/) |
| `$.transform(name, value, callback)` | Изпълнява трансформация с тази заявка. | [transforms](/en/total5/transforms/) |
| `$.authorize(callback)` | Изпълнява `AUTH()` за тази заявка и задава `$.user`; връща promise, когато няма callback. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.notmodified(date)` | Отговаря 304 и връща `true`, когато заявката има заглавие `if-modified-since` с тази дата. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.httpcache(date)` | Задава заглавията за кеш и `last-modified` на отговора. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.clear()` | Премахва временните файлове на качването. Те се премахват така или иначе, когато заявката приключи. | [file-upload](/en/total5/file-upload/) |
| `$.autoclear(false)` | Запазва качените файлове след заявката, за да ги ползвате по-късно. | [upload-lifecycle-and-href](/en/total5/upload-lifecycle-and-href/) |
| `$.custom()` | Казва на фреймуърка, че отговаряте сами през `$.res`: той няма да изпрати нищо. | [controller-completion-and-cache](/en/total5/controller-completion-and-cache/) |
| `$.href(key, value)` | Използвайте `QUERIFY()` както в свързаната рецепта, изпитания роден помощник за връзки със заявка. | [upload-lifecycle-and-href](/en/total5/upload-lifecycle-and-href/) |
| `$.flush()`, `$.resume()`, `$.free()`, `$.cancel()` | Вътрешни методи: не ги извиквайте. | - |

Примерът отговаря със свойствата и извиква методите, които не се нуждаят от подготовка.

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