Référence rapide

Aide-mémoire Modella Models

Guide de référence pour Modella : framework minimaliste de modèles en JavaScript, attributs, validations, événements et plugins.

· Publié le

[!NOTE] Projet archivé: Modella est un framework historique minimaliste pour Node.js et navigateurs. Pour les projets récents, préférez Zod ou Prisma.

Modella est une bibliothèque épurée de modélisation de données conçue pour être enrichie via des plugins.

Définition de modèle

const Modella = require('modella');
const validators = require('modella-validators');

const User = Modella('User')
  .attr('id')
  .attr('name')
  .attr('email', { required: true })
  .use(validators);

// Règle de validation personnalisée
User.validate((user) => {
  if (!user.name()) {
    user.error('name', 'Name is required');
  }
});

Instances et propriétés

// Instanciation
const user = new User({ name: 'Alice', email: '[email protected]' });

// Getters et Setters
user.name();               // -> "Alice"
user.name('Bob');          // Sets name to "Bob"
user.set({ name: 'Charlie' });

// Prédicats d état
user.has('name');          // -> true
user.isNew();              // -> true (not yet saved)
user.isValid();            // Runs sync validators -> true/false

Événements de cycle de vie

// Événements de persistance
user.on('save', () => console.log('Saved'));
user.on('create', () => console.log('Created'));
user.on('remove', () => console.log('Removed'));

// Hooks asynchrones
user.on('saving', (instance, done) => {
  done();
});

// Événements de modification d attributs
user.on('change', () => console.log('Attributes modified'));
user.on('change email', () => console.log('Email changed'));

Architecture des plugins

Un plugin Modella est une fonction d ordre supérieur qui décore le modèle :

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

Références

Sujets associés