ForgeTotal.js 5
pt

Total.js 5

Ação de ciclo de vida, extensão de resultado e guardas de administrador

Total.js 5 · total5@0.0.19 total5reference Executada com o Total.js 5

oninput($) corre depois da validação da entrada e do middleware declarado, imediatamente antes da função da ação. onoutput(error,response,$) corre no caminho de conclusão bem-sucedida, depois da filtragem da saída e da extensão opcional. Na 0.0.19, uma entrada inválida ou $.invalid() não chama este hook; não o trate como um hook universal de erro ou de finally.

extend:'result' acrescenta o resultado da ação à sua entrada validada sob essa chave e devolve a entrada estendida. Um caminho com pontos usa atribuição aninhada. É útil para a composição deliberada de ações; altera o contrato público da resposta.

Seja sa:true ou su:true requer um usuário com qualquer bandeira de administrador. eles não definem dois terceiros privileges diferentes. verificações de permissões normais permanecem separadas.

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