A NEWACTION lehetőségek és a cselekvés tárgyát megkapja
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 |
csrf, encrypt, compress, publish | action-transport-boundaries | |
sa, su | true | action-hooks-and-admin |
oninput, onoutput | function | action-hooks-and-admin |
extend | path | 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. |
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();
});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');
};