ForgeTotal.js 5
nl

Total.js 5

Actie levenscyclus hooks, resultaat uitbreiding en administrator wachten

Total.js 5 · total5@0.0.19 total5reference Uitgevoerd met Total.js 5

oninput($) draait na de invoervalidatie en de gedeclareerde middleware, vlak vóór de actiefunctie. onoutput(error,response,$) draait op het pad van succesvolle afronding, na het filteren van de uitvoer en de optionele uitbreiding. In 0.0.19 roept een ongeldige invoer of $.invalid() deze hook niet aan; behandel hem niet als een universele fout- of finally-hook.

extend:'result' voegt het resultaat van de actie onder die sleutel toe aan zijn gevalideerde invoer en geeft de uitgebreide invoer terug. Een pad met punten gebruikt geneste toewijzing. Het is nuttig voor bewuste samenstelling van acties; het wijzigt het publieke contract van het antwoord.

Of sa:true of su:true vereist een gebruiker met een administratorvlag. Ze definiëren geen twee verschillende privileges. Normale toelating checks blijven gescheiden. Set deze administrator vlaggen alleen van vertrouwde server authenticatie.

definitions/hooks.js
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);
}
controllers/hooks.js
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));
};