Gruppera actions i ett schema och återanvänd input-definitioner
NEWSCHEMA(name, fn) grupperar en entitets actions. Funktionen får schemaobjektet och schema.action(name, meta) registrerar en action som heter Name/action, med samma alternativ som NEWACTION() (input, output, params, user, permissions, action...). På alla andra ställen används actionen med sitt fullständiga namn, precis som om den hade deklarerats med NEWACTION('Users/insert', ...): ROUTE('POST /users/ --> *Users/insert') eller ACTION('Users/insert', payload).
Ett fragment av en input-definition som flera actions delar, till exempel en adress, läggs i en egen fil i jsonschemas/. En .txt-fil innehåller samma name:Type-lista som input; filens namn är schemats namn. Hänvisa till den från en input med @Name, så läggs dess fält (och vilka som är obligatoriska) till actionens egna fält.
*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');
};