# Επιλογές NEWACTION και το αντικείμενο μιας δράσης λαμβάνει

> Εισάγετε NEWACTION και χρησιμοποιήστε το πλαίσιο δράσης για να χειριστείτε τις αιτήσεις.

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

Το `NEWACTION(name, options)` δηλώνει μια ενέργεια. Το `name` είναι το αναγνωριστικό της (`Users/insert`): οι διαδρομές το χρησιμοποιούν με `--> *Users/insert` και ο κώδικάς σας με `ACTION('Users/insert', payload)`.

## Επιλογές

| Επιλογή | Τιμή | Τι κάνει |
|---|---|---|
| `name` | κείμενο | Μια περιγραφή της ενέργειας· είναι επίσης διαθέσιμη ως `$.name`. |
| `action` | `function($, model)` | Ο κώδικας της ενέργειας. Το `model` είναι η επικυρωμένη είσοδος. |
| `input` | κείμενο | Τα πεδία του σώματος, ως `name:Type` χωρισμένα με κόμματα· ένα `*` πριν από το όνομα το κάνει υποχρεωτικό. Δείτε τη σελίδα για τους τύπους εισόδου. |
| `output` | κείμενο | Τα πεδία της απάντησης· τα πεδία που δεν αναφέρονται αφαιρούνται. |
| `params` | κείμενο | Τα τμήματα `{name}` της διαδρομής, επικυρωμένα όπως το `input`. |
| `query` | κείμενο | Η συμβολοσειρά ερωτήματος, επικυρωμένη όπως το `input`. |
| `partial` | `true` | Μόνο τα πεδία που στάλθηκαν φτάνουν στην ενέργεια. Χρησιμοποιήστε το για `PATCH`. |
| `user` | `true` ή `false` | Το `true` απαντά 401 όταν δεν υπάρχει συνδεδεμένος χρήστης· το `false` δέχεται μόνο ανώνυμα αιτήματα. |
| `permissions` | κείμενο ή πίνακας | `'read,write'`: ο χρήστης χρειάζεται ένα από αυτά (ή να είναι υπερδιαχειριστής). |
| `route` | κείμενο | Δηλώνει εδώ τη διαδρομή της ενέργειας: `'GET /products/'`, ή `true` για διαδρομή `API`. |
| `middleware` | κείμενο | Ονόματα middleware που τρέχουν πριν από την ενέργεια, χωρισμένα με κενά ή κόμματα. |
| `timeout` | χιλιοστά του δευτερολέπτου | Όταν η ενέργεια δεν απαντά εγκαίρως, το αίτημα αποτυγχάνει με το σφάλμα `Timeout.`. |
| `cache` | `true` ή ένα αντικείμενο | Κρατήστε το αποτέλεσμα μιας ενέργειας με το `CACHE`. |
| `config` | αντικείμενο | Τιμές που η ενέργεια διαβάζει από το `$.config`. |
| `audit` | text | Καταγράφει ένα συμβάν μετά την επιτυχή ολοκλήρωση· η ειδική συνταγή ελέγχει τα όρια. [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/) |

## Το αντικείμενο `$` μιας ενέργειας

| Μέλος | Τι είναι |
|---|---|
| `$.query`, `$.params` | Η επικυρωμένη συμβολοσειρά ερωτήματος και τα τμήματα της διαδρομής. |
| `$.payload` | Η επικυρωμένη είσοδος· είναι το ίδιο αντικείμενο με το δεύτερο όρισμα του `action`. |
| `$.user` | Ο συνδεδεμένος χρήστης. |
| `$.config` | Η επιλογή `config`. |
| `$.name`, `$.id` | Η επιλογή `name` και το αναγνωριστικό της ενέργειας. |
| `$.controller` | Το `$` της διαδρομής όταν η ενέργεια κλήθηκε από διαδρομή, άρα το `$.controller.body` είναι το ακατέργαστο σώμα. Δεν υπάρχει όταν η ενέργεια καλείται με `ACTION()`. |
| `$.callback(value)` | Απαντά με μια τιμή· φιλτράρεται από το `output`. Χωρίς ορίσματα επιστρέφει μια συνάρτηση `(err, response)`. |
| `$.success(value)` | Απαντά `{ success: true }`. |
| `$.invalid(error)` | Απαντά με σφάλμα: ένα κείμενο, έναν κωδικό κατάστασης ή ένα `ErrorBuilder`. |
| `$.done(arg)`, `$.successful(fn)` | Επιστρέφουν callbacks για συναρτήσεις που αναφέρουν σφάλμα ως πρώτο όρισμα. |
| `$.cookie(name, value, expiration)` | Διαβάζει ή γράφει ένα cookie του αιτήματος. |
| `$.redirect(url)` | Ανακατευθύνει το αίτημα. |
| `$.output(name)` | Επιλέγει πώς απαντά μια διαδρομή: `json`, `html`, `xml`, `text`, `redirect`, `binary`, `jsonstring`, `empty` ή `file`. |
| `$.unauthorized(...permissions)` | Απαντά 401 και επιστρέφει `true` όταν ο χρήστης δεν έχει καμία από τις άδειες. |
| `$.action(name, payload)` | Εκτελεί μια άλλη ενέργεια με το ίδιο αίτημα. |
| `$.hostname(path)` | Η διεύθυνση αυτού του διακομιστή. |

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