Κύκλοι ζωής δράσης, επέκταση αποτελεσμάτων και διατηρητές διαχειριστών
Το oninput($) εκτελείται μετά την επικύρωση της εισόδου και το δηλωμένο middleware, ακριβώς πριν από τη συνάρτηση της ενέργειας. Το onoutput(error,response,$) εκτελείται στη διαδρομή επιτυχούς ολοκλήρωσης, μετά το φιλτράρισμα της εξόδου και την προαιρετική επέκταση. Στην 0.0.19, μια μη έγκυρη είσοδος ή το $.invalid() δεν καλεί αυτό το hook· μην το αντιμετωπίζετε ως καθολικό hook σφάλματος ή finally.
Το extend:'result' προσθέτει το αποτέλεσμα της ενέργειας στην επικυρωμένη είσοδό της με αυτό το κλειδί και επιστρέφει την εκτεταμένη είσοδο. Μια διαδρομή με τελείες χρησιμοποιεί εμφωλευμένη ανάθεση. Είναι χρήσιμο για σκόπιμη σύνθεση ενεργειών· αλλάζει το δημόσιο συμβόλαιο της απάντησης.
Είτε το sa:true είτε το su:true απαιτούν έναν χρήστη με οποιαδήποτε σημαία διαχειριστή. Δεν ορίζουν δύο διαφορετικά δευτερόλεπτα προνόμια. Τα κανονικά ελέγχους άδειας παραμένουν ξεχωριστά.
MAIN.hooks = [];
AUTH(function($) {
var role = $.headers['x-demo-role'];
if (role === 'sa' || role === 'su') $.success({ id:'admin', [role]:true });
else if (role === 'member') $.success({id:'member'});
else $.invalid();
});
NEWACTION('Hooks|extend', {
input: '*name:String',
extend: 'result',
oninput: function($) { MAIN.hooks.push('input:' + $.payload.name); },
onoutput: function(err, response) { MAIN.hooks.push('output:' + response.result.greeting); },
action: function($, model) { $.callback({greeting:'Hello ' + model.name}); }
});
NEWACTION('Hooks|fail', {
onoutput: function() { MAIN.hooks.push('unexpected'); },
action: function($) { $.invalid('failed'); }
});
for (var flag of ['sa','su']) {
var action = { action:function($) { $.success(); } };
action[flag] = true;
NEWACTION('Hooks|' + flag, action);
}exports.install = function() {
ROUTE('POST /extend/ @json --> Hooks|extend');
ROUTE('GET /fail/ --> Hooks|fail');
ROUTE('GET /sa/ --> Hooks|sa');
ROUTE('GET /su/ --> Hooks|su');
ROUTE('GET /hook-events/', $ => $.json(MAIN.hooks));
};