Snelle referentie

Modella Modellen Spiekbrief

Beknopte handleiding voor Modella: minimalistisch JavaScript-modelframework, attribuutdefinities, validaties en plugins.

· Gepubliceerd

[!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());

Referenties

Verwante onderwerpen