Grupează acțiunile într-o schemă și refolosește definițiile de input
NEWSCHEMA(name, fn) grupează acțiunile unei entități. Funcția primește obiectul schemei, iar schema.action(name, meta) înregistrează o acțiune numită Name/action, cu aceleași opțiuni ca NEWACTION() (input, output, params, user, permissions, action...). În rest, acțiunea se folosește cu numele ei complet, exact ca și cum ar fi fost declarată cu NEWACTION('Users/insert', ...): ROUTE('POST /users/ --> *Users/insert') sau ACTION('Users/insert', payload).
Un fragment de definiție de input pe care îl partajează mai multe acțiuni, cum ar fi o adresă, merge în propriul fișier din jsonschemas/. Un fișier .txt conține aceeași listă name:Type ca input; numele fișierului este numele schemei. Referă-l dintr-un input cu @Name, iar câmpurile lui (și care dintre ele sunt obligatorii) se adaugă la câmpurile proprii ale acțiunii.
*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');
};