[!NOTE] Arkiverat projekt: Modella är ett historiskt modellramverk för Node.js och webbläsare. För moderna projekt rekommenderas Zod eller Prisma.
Modella är ett avskalat datamodelleringsbibliotek designat för att byggas ut med plugins.
Modelldefinition
const Modella = require('modella');
const validators = require('modella-validators');
const User = Modella('User')
.attr('id')
.attr('name')
.attr('email', { required: true })
.use(validators);
// Anpassad valideringsregel
User.validate((user) => {
if (!user.name()) {
user.error('name', 'Name is required');
}
});
Modellinstanser och egenskaper
// Instansiering
const user = new User({ name: 'Alice', email: '[email protected]' });
// Getters och Setters
user.name(); // -> "Alice"
user.name('Bob'); // Sets name to "Bob"
user.set({ name: 'Charlie' });
// Tillståndspredikat
user.has('name'); // -> true
user.isNew(); // -> true (not yet saved)
user.isValid(); // Runs sync validators -> true/false
Livscykelhändelser
// Persistenshändelser
user.on('save', () => console.log('Saved'));
user.on('create', () => console.log('Created'));
user.on('remove', () => console.log('Removed'));
// Asynkrona hooks
user.on('saving', (instance, done) => {
done();
});
// Attributändringshändelser
user.on('change', () => console.log('Attributes modified'));
user.on('change email', () => console.log('Email changed'));
Plugin-arkitektur
Ett Modella-plugin är en funktion av högre ordning som utökar modellen:
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());