[!NOTE] Αρχειοθετημένο Έργο: Το Modella είναι ένα ιστορικό πλαίσιο μοντέλων για Node.js και εφαρμογές περιηγητή. Για σύγχρονα έργα, προτείνονται τα Zod ή Prisma.
Το Modella είναι μια απλή βιβλιοθήκη μοντελοποίησης δεδομένων σχεδιασμένη να επεκτείνεται μέσω plugins.
Ορισμός Μοντέλου
const Modella = require('modella');
const validators = require('modella-validators');
const User = Modella('User')
.attr('id')
.attr('name')
.attr('email', { required: true })
.use(validators);
// Προσαρμοσμένος κανόνας επικύρωσης
User.validate((user) => {
if (!user.name()) {
user.error('name', 'Name is required');
}
});
Στιγμιότυπα & Ιδιότητες Μοντέλου
// Αρχικοποίηση
const user = new User({ name: 'Alice', email: '[email protected]' });
// Getters και Setters
user.name(); // -> "Alice"
user.name('Bob'); // Sets name to "Bob"
user.set({ name: 'Charlie' });
// Κατηγορήματα κατάστασης
user.has('name'); // -> true
user.isNew(); // -> true (not yet saved)
user.isValid(); // Runs sync validators -> true/false
Συμβάντα Κύκλου Ζωής
// Συμβάντα εμμονής
user.on('save', () => console.log('Saved'));
user.on('create', () => console.log('Created'));
user.on('remove', () => console.log('Removed'));
// Ασύγχρονα hooks
user.on('saving', (instance, done) => {
done();
});
// Συμβάντα αλλαγής γνωρισμάτων
user.on('change', () => console.log('Attributes modified'));
user.on('change email', () => console.log('Email changed'));
Αρχιτεκτονική Πρόσθετων (Plugins)
Ένα plugin του Modella είναι μια συνάρτηση ανώτερης τάξης που διακοσμεί το μοντέλο:
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());