# A NEWACTION lehetőségek és a cselekvés tárgyát megkapja

> Állítsa be a NEWACTION-t, és használja a cselekvési kontextust a kérések kezelésére.

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

A `NEWACTION(name, options)` műveletet deklarál. A `name` az azonosítója (`Users/insert`): az útvonalak a `--> *Users/insert` formával használják, a kódod pedig az `ACTION('Users/insert', payload)` hívással.

## Beállítások

| Beállítás | Érték | Mit csinál |
|---|---|---|
| `name` | szöveg | A művelet leírása; `$.name` néven is elérhető. |
| `action` | `function($, model)` | A művelet kódja. A `model` az érvényesített bemenet. |
| `input` | szöveg | A törzs mezői `name:Type` alakban, vesszővel elválasztva; a név előtti `*` kötelezővé teszi. Lásd a bemeneti típusokról szóló oldalt. |
| `output` | szöveg | A válasz mezői; a fel nem sorolt mezők eltávolításra kerülnek. |
| `params` | szöveg | Az útvonal `{name}` szegmensei, az `input`-hoz hasonlóan érvényesítve. |
| `query` | szöveg | A lekérdezési karakterlánc, az `input`-hoz hasonlóan érvényesítve. |
| `partial` | `true` | Csak az elküldött mezők jutnak el a művelethez. `PATCH`-hez használd. |
| `user` | `true` vagy `false` | A `true` 401-gyel válaszol, ha nincs bejelentkezett felhasználó; a `false` csak a névtelen kéréseket fogadja el. |
| `permissions` | szöveg vagy tömb | `'read,write'`: a felhasználónak szüksége van az egyikre (vagy szuperadminisztrátornak kell lennie). |
| `route` | szöveg | Itt deklarálja a művelet útvonalát: `'GET /products/'`, vagy `true` egy `API` útvonalhoz. |
| `middleware` | szöveg | A művelet előtt futó middleware nevei, szóközzel vagy vesszővel elválasztva. |
| `timeout` | ezredmásodperc | Ha a művelet nem válaszol időben, a kérés a `Timeout.` hibával meghiúsul. |
| `cache` | `true` vagy egy objektum | Egy akció eredményét tárold a `CACHE` segítségével. |
| `config` | objektum | Értékek, amelyeket a művelet a `$.config`-ból olvas. |
| `audit` | text | Sikeres befejezés után eseményt rögzít; a külön recept ellenőrzi a működés határait. [action-audit](/en/total5/action-audit/) |
| `csrf`, `encrypt`, `compress`, `publish` | - | [action-transport-boundaries](/en/total5/action-transport-boundaries/) |
| `sa`, `su` | true | [action-hooks-and-admin](/en/total5/action-hooks-and-admin/) |
| `oninput`, `onoutput` | function | [action-hooks-and-admin](/en/total5/action-hooks-and-admin/) |
| `extend` | path | [action-hooks-and-admin](/en/total5/action-hooks-and-admin/) |

## Egy művelet `$` objektuma

| Tag | Mi ez |
|---|---|
| `$.query`, `$.params` | Az érvényesített lekérdezési karakterlánc és az útvonal szegmensei. |
| `$.payload` | Az érvényesített bemenet; ugyanaz az objektum, mint az `action` második argumentuma. |
| `$.user` | A bejelentkezett felhasználó. |
| `$.config` | A `config` beállítás. |
| `$.name`, `$.id` | A `name` beállítás és a művelet azonosítója. |
| `$.controller` | Az útvonal `$`-ja, ha a műveletet útvonalból hívták, így a `$.controller.body` a nyers törzs. Nem létezik, ha a műveletet az `ACTION()`-nel hívják. |
| `$.callback(value)` | Értékkel válaszol; az `output` szűri. Argumentumok nélkül egy `(err, response)` függvényt ad vissza. |
| `$.success(value)` | `{ success: true }`-val válaszol. |
| `$.invalid(error)` | Hibával válaszol: szöveggel, állapotkóddal vagy `ErrorBuilder`-rel. |
| `$.done(arg)`, `$.successful(fn)` | Visszahívásokat adnak vissza olyan függvényekhez, amelyek az első argumentumban jeleznek hibát. |
| `$.cookie(name, value, expiration)` | Beolvassa vagy beírja a kérés egy sütijét. |
| `$.redirect(url)` | Átirányítja a kérést. |
| `$.output(name)` | Kiválasztja, hogyan válaszol egy útvonal: `json`, `html`, `xml`, `text`, `redirect`, `binary`, `jsonstring`, `empty` vagy `file`. |
| `$.unauthorized(...permissions)` | 401-gyel válaszol, és `true`-t ad vissza, ha a felhasználónak egyik jogosultsága sincs. |
| `$.action(name, payload)` | Egy másik műveletet futtat ugyanazzal a kéréssel. |
| `$.hostname(path)` | Ennek a szervernek a címe. |

```js definitions/options.js
MIDDLEWARE('tag', function($, next) {
	$.response.headers['x-tag'] = 'on';
	next();
});

var counter = { cached: 0 };
MAIN.counter = counter;

NEWACTION('Options/named', {
	name: 'The name',
	config: { limit: 3 },
	action: function($) {
		$.callback({ name: $.name, id: $.id, limit: $.config.limit });
	}
});

NEWACTION('Options/guarded', {
	name: 'Needs a user',
	user: true,
	permissions: 'read',
	action: function($) {
		$.success();
	}
});

NEWACTION('Options/slow', {
	name: 'Never answers',
	timeout: 300,
	action: function($) {}
});

NEWACTION('Options/cached', {
	name: 'The cache option',
	query: 'page:Number',
	cache: { expire: '1 minute', query: 'page' },
	action: function($) {
		counter.cached++;
		$.callback({ page: $.query.page, runs: counter.cached });
	}
});

NEWACTION('Options/routed', {
	name: 'Declares its own route',
	route: 'GET /routed/ #tag',
	action: function($) {
		$.callback({ routed: true });
	}
});

NEWACTION('Options/output', {
	name: 'Chooses how to answer',
	action: function($) {
		$.output('plain');
		$.callback('plain text');
	}
});

AUTH(function($) {
	if ($.headers['x-user'])
		$.success({ id: '1', permissions: $.headers['x-user'].split(',') });
	else
		$.invalid();
});
```

```js controllers/options.js
exports.install = function() {
	ROUTE('GET /named/ --> *Options/named');
	ROUTE('GET /guarded/ --> *Options/guarded');
	ROUTE('GET /slow/ --> *Options/slow');
	ROUTE('GET /cached/ --> *Options/cached');
	ROUTE('GET /output/ --> *Options/output');
};
```
