Raggruppare le azioni in uno schema e riutilizzare le definizioni di input
NEWSCHEMA(name, fn) raggruppa le azioni di un'entità. La funzione riceve l'oggetto schema e schema.action(name, meta) registra un'azione chiamata Name/action, con le stesse opzioni di NEWACTION() (input, output, params, user, permissions, action...). Altrove l'azione si usa con il suo nome completo, esattamente come se fosse stata dichiarata con NEWACTION('Users/insert', ...): ROUTE('POST /users/ --> *Users/insert') oppure ACTION('Users/insert', payload).
Un frammento di definizione di input condiviso da più azioni, come un indirizzo, va in un proprio file in jsonschemas/. Un file .txt contiene la stessa lista name:Type di input; il nome del file è il nome dello schema. Richiamalo da un input con @Name e i suoi campi (e quali sono obbligatori) vengono aggiunti ai campi propri dell'azione.
*street:String, *city:String, zip:StringNEWSCHEMA('Users', function(schema) {
schema.action('insert', {
name: 'Create a user',
input: '*name:String, @Address',
output: 'id:UID, name:String, city:String',
action: function($, model) {
$.callback({ id: UID(), name: model.name, city: model.city });
}
});
schema.action('count', {
name: 'Count users',
action: function($) {
$.callback({ count: 2 });
}
});
});exports.install = function() {
ROUTE('POST /users/ --> *Users/insert');
ROUTE('GET /users/count/ --> *Users/count');
};