Snabbreferens

Modella Modeller Fusklapp

Snabbreferens för Modella: minimalistiskt JavaScript-modellramverk, attributdefinitioner, valideringar och insticksprogram.

· Publicerad

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

Referenser

Relaterade ämnen