[!NOTE] Gearchiveerd project: Modella is een historisch modelframework voor Node.js en browsers. Voor moderne projecten worden Zod of Prisma aangeraden.
Modella is een minimalistische datamodelleringsbibliotheek die kan worden uitgebreid met plugins.
Modeldefinitie
const Modella = require('modella');
const validators = require('modella-validators');
const User = Modella('User')
.attr('id')
.attr('name')
.attr('email', { required: true })
.use(validators);
// Aangepaste validatieregel
User.validate((user) => {
if (!user.name()) {
user.error('name', 'Name is required');
}
});
Modelinstanties & Eigenschappen
// Instantiëring
const user = new User({ name: 'Alice', email: '[email protected]' });
// Getters en Setters
user.name(); // -> "Alice"
user.name('Bob'); // Sets name to "Bob"
user.set({ name: 'Charlie' });
// Statuspredikaten
user.has('name'); // -> true
user.isNew(); // -> true (not yet saved)
user.isValid(); // Runs sync validators -> true/false
Lifecycle-events
// Persistentie-events
user.on('save', () => console.log('Saved'));
user.on('create', () => console.log('Created'));
user.on('remove', () => console.log('Removed'));
// Asynchrone hooks
user.on('saving', (instance, done) => {
done();
});
// Attribuut-wijzigingsevents
user.on('change', () => console.log('Attributes modified'));
user.on('change email', () => console.log('Email changed'));
Plugin-architectuur
Een Modella-plugin is een hogere-ordefunctie die het model decoreert:
const TimestampsPlugin = () => {
return (Model) => {
Model
.attr('createdAt')
.attr('updatedAt');
Model.on('saving', (record, done) => {
const now = new Date();
if (record.isNew()) record.createdAt(now);
record.updatedAt(now);
done();
});
return Model;
};
};
User.use(TimestampsPlugin());